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
实例,例如在循环中,在虚拟机开始救援之前,可能会导致内存不足。
虽然我觉得还有其他东西会造成更大的伤害,这可能不在您在此发布的代码中。
谢谢!!,是的,我从服务器下载图像(一次500左右),并显示在一个gridview。在这个活动内存是21299(MemoryInfo信息=新的MemoryInfo(); info.getTotalPss())。但当我回来时它释放 – JCJ
最初,我的应用程序分配2.757 MB的堆[Heop size为5.383 MB],同时崩溃的状态是堆大小为6.195 MB,分配为3.37MB。 – JCJ