コードでメモリ リークが発生する可能性があり、解決策を見つけようとしています。Spring for Android フレームワークを使用しています。そしてより具体的には、
RestTemplate.exchange();
オンザフライ バインディングを作成するため。ただし、メモリ分析を行うと、次のようになります。
「dalvik.system.PathClassLoader @ 0x43692b80」によってロードされた「com.products.Product」の 1.628 インスタンスは、1.363.064 (22,20%) バイトを占有します。これらのインスタンスは、"" によってロードされた "java.lang.Object[]" の 1 つのインスタンスから参照されます。ドミネーター ツリーは次のとおりです。
class 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 は、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
}