【问题标题】:Memory leak, Spring for Android内存泄漏,Android 的 Spring
【发布时间】:2012-12-02 08:03:24
【问题描述】:

我的代码可能存在内存泄漏,我正在尝试寻找解决方案。我正在使用 Spring for Android 框架。更具体的

  RestTemplate.exchange();

为了进行即时绑定。但是,当我进行内存分析时,我得到以下信息:

由“dalvik.system.PathClassLoader @ 0x43692b80”加载的“com.products.Product”的 1.628 个实例占用 1.363.064 (22,20%) 个字节。这些实例引用自“java.lang.Object[]”的一个实例,由“”加载。支配树如下:

类 com.products.ProductList @ 0x436d7ea8 系统类| 1.628 | 8 | 130.240 | 8

mFilteredProducts java.util.ArrayList @ 0x43a4eab0| 1.628 | 24 | 130.240 | 6.552

数组 java.lang.Object[1628] @ 0x43bdc888| 1.628 | 6.528 | 130.240 | 6.528

[274] com.products.Product @ 0x4398b038| 1 | 80 | 80 | 760

[1175] com.products.Product @ 0x43b26868| 1 | 80 | 80 | 808

........

以上是支配树。但是我想知道是否有一种安全的方法来激活垃圾收集器。是

  System.gc();

安全吗?但是,有没有办法停止这种内存泄漏? com.products.Product 类只是一个简单的 POJO,它将 JSON 字段绑定到相应的属性。一般用于绑定JSON的POJO如下:

@JsonIgnoreProperties(ignoreUnknown = true) //must be there all times most likely
public class MyPojo {

@JsonProperty("Products")
private ArrayList<Product> products;

public ArrayList<Product> getProducts() {
    return products;
}

public void setProducts(ArrayList<Product> products) {
    this.products = products;
}
}

com.products.Product:

@JsonIgnoreProperties(ignoreUnknown = true) //must be there all times most likely
public class Products {

 @JsonProperty
 private String prodnum;
 @JsonProperty
 private String brand;
 @JsonProperty
 private String name;

       //get/set
}

【问题讨论】:

    标签: java android spring memory-leaks


    【解决方案1】:

    拨打System.gc() 是安全的。但这并不一定会触发实际的垃圾收集。仅调用此方法建议 JVM 尽一切努力执行垃圾收集。但是 Java 没有办法强制它。

    关于内存泄漏。看看ProductList,为什么它会保存所有这些对象。如果仍然从应用程序中的任何位置引用 ProductList,则不会发布所有这些产品。

    【讨论】:

      【解决方案2】:

      System.gc() 正如@wajda 所说的那样是安全的

      今天我在桌面应用程序中遇到了类似的问题,问题是我在使用后没有关闭 PreparedStatement 和 ResultSet 对象。在大约 600 次查询之后,我填满了 256mb 的分配空间。在使用 JVisualVM(你的 JDK 中应该有它)并分析堆积的内容后,我看到 char 数组占用了 80% 的空间,而且它们都是空的。

      尝试在每次使用后关闭所有 JSON 对象,看看是否有帮助。

      干杯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        • 2012-11-14
        相关资源
        最近更新 更多