Eclipse MAT在代码中显示momoryleak,此代码有什么错误?

问题描述:

公共类ProductListGetSet {Eclipse MAT在代码中显示momoryleak,此代码有什么错误?

static ArrayList<ProductListItems> productListItems; 
ProductListItems items; 

ProductListGetSet() 
{ 

    productListItems = new ArrayList<ProductListItems>(); 

} 

public static int getProductListCount() { 

    return productListItems.size(); 
} 

public void setProductListItems(String name, String price, String rating, String review) { 

    items = new ProductListItems(); 
    items.productName = name; 

    items.productPrice = price; 
    items.productRating = rating; 
    items.productReview = review; 

    productListItems.add(items); 

} 

public static ArrayList<ProductListItems> getProductListItems() { 

    return productListItems; 

} 

public void setProductListItemsWithoutReview(String name, String price, String rating) { 

    setProductListItems(name, price, rating, "0"); 

} 

public void setProductListItemsWithoutRating(String name, String price, String review) { 

    setProductListItems(name, price, "0", review); 

} 

public void setProductListItemsWithoutRatingReview(String name, String price) { 

    setProductListItems(name, price, "0", "0"); 

} 

public static void removeProductList() 
{ 
    productListItems.clear(); 
} 

}

我从数据库中获取记录,并保存到这个class.At时候,我会节省超过500条记录。

有没有解决办法或替代方案? 我正在退出内存错误()(位图大小超过虚拟机预算)。 请帮助我!

静态变量productListItems正在构造函数ProductListGetSet中构造。因此,如果我构造ProductListGetSet的实例并使用setProductListItems()添加500个产品,并在我的代码的另一个点构建另一个ProductListGetSet,则我的代码将创建另一个productListItems对象。所以原来productListItems的前500名成员在内存中,我正在创建另一个变量副本。

如果您在代码中构建了很多ProductListGetSet实例,例如在循环中,在虚拟机开始救援之前,可能会导致内存不足。

虽然我觉得还有其他东西会造成更大的伤害,这可能不在您在此发布的代码中。

+0

谢谢!!,是的,我从服务器下载图像(一次500左右),并显示在一个gridview。在这个活动内存是21299(MemoryInfo信息=新的MemoryInfo(); info.getTotalPss())。但当我回来时它释放 – JCJ

+0

最初,我的应用程序分配2.757 MB的堆[Heop size为5.383 MB],同时崩溃的状态是堆大小为6.195 MB,分配为3.37MB。 – JCJ