私のコードで潜在的なメモリリークがあり、解決策を見つけようとしています。私はSpring for Androidフレームワークを使用しています。さらに具体的には、メモリリーク、Android用の春
RestTemplate.exchange();
オンザフライバインディングを行うためです。しかし、私がメモリ分析を行うと、次のような結果が得られます。
1.628 "com.products.Product"のインスタンス "dalvik.system.PathClassLoader @ 0x43692b80"が1.363.064(22,20%)バイトを占めています。これらのインスタンスは、 ""によってロードされた "java.lang.Object []"の1つのインスタンスから参照されます。ドミネーターツリーは次のとおりです。
class com.products.ProductList @ 0x436d7ea8 Systemクラス| 1.628 | 8 | 130.240 | 8
mFilteredProducts java.util.ArrayListの@ 0x43a4eab0 | 1.628 | 24 | 130.240 | 0x43bdc888 @ 6.552
配列java.lang.Objectの[1628] | 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は、JSONフィールドを対応する属性にバインドする単なるPOJOです。 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
}