2012-12-14 20 views
6

私のコードで潜在的なメモリリークがあり、解決策を見つけようとしています。私は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 
} 

答えて

0

System.gc()が安全である呼び出します。しかし、必ずしも実際のガベージコレクションを引き起こすとは限りません。このメソッドを呼び出すだけでは、 JVMがガベージコレクションを実行するためのすべての努力をすることを提案しています。 Javaにはそれを強制する方法はありません。

メモリリークについては、ProductListを見てください。なぜそれらすべてのオブジェクトを保持していますか? ProductListがアプリケーション内のどこからでも参照されている場合、これらの製品はすべて解放されません。 @wajdaはすでに

今日、私はデスクトップアプリケーションと同様の問題を持っていた問題は、私は使用後のPreparedStatementとResultSetオブジェクトを閉じていなかったことを言ったとして

0

にSystem.gc()が安全です。約600件の質問の後、私は256 MBの割り当てられたスペースを埋めました。 JVisualVMを使用した後(JDK内にあるはずです)、何が積み上げられているかを分析すると、スペースの80%を占めるchar配列が見えて、それらはすべて空でした。

各使用後にすべてのJSONオブジェクトを試して終了し、役立つかどうかを確認してください。

乾杯

関連する問題