2017-05-04 4 views
0

メモリヒープを管理するオブジェクトを削除しようとしました。Javaでメモリヒープを管理するためのオブジェクトを削除する

しかし、動作していません。

私はキャッシュデータ(画像データ)を持っています。 親クラスは、多くの画像データを持つクライアント(クラス名)です。 クライアント(クライアントクラスには学習クラスリストがあります)>>学習(学習クラスにはクラスクラスリストがあります)>>シリーズ(シリーズクラスには画像クラスリストがあります)>>画像(画像クラスには画像データがあります)

私は最高の親クラスのオブジェクトを削除する(下記)

  1. メモリヒープを管理するためのいくつかの方法を試してみました。 例)クライアント: - : - )(キーstudyList.remove + seriesList.remove(キー)+画像データ= NULL)(キーstudyList.removeは>私は、画像データを削除し、すべてのリスト EX)クライアント

  2. に動作しません>動作しません。

アクティビティモニタ(のMacbook)Javaのメモリヒープが無料ではありません示してい..

クライアントクラス下にあります。

private HashMap<Integer, Study> StudyListByKey = new HashMap<Integer, Study>(); 

研究クラス以下があります。

private HashMap<Integer, Series> SeriesListByKey = new HashMap<Integer, Series>(); 

シリーズクラスは以下のとおりです:

private HashMap<Integer, Image> ImageListByKey = new HashMap<Integer, Image>(); 

Imageクラスは以下があります:

private ArrayList<byte[]> images = new ArrayList<byte[]>(); 

は、コードの画像データを削除する以下の通りです:

public void removeDICOMImage() { 
    this.logger.info(this.images); 
    this.images = null; 
} 

ない...仕事... がどのようにメモリヒープ上の画像データを削除できますか?

まあ、壮大な..親クラスのオブジェクトは無料です..子供 - >無料??

私は間違っていますか?

+0

ヒープ内の何かを解放しても、メモリがOSに返されるわけではありません。 – Henry

+0

JVMは必ずしもオペレーティングシステムにメモリを解放しません。将来の割り当てを想定して空きメモリーを保持する可能性があります(JVM実装に依存します) –

+0

nullにする必要のないオブジェクトを設定しないのはなぜですか。これにより、GCがメモリから解放され、フリーのJVMスペース –

答えて

0

System.gc()またはRuntime.gc()でガベージコレクタを呼び出すことはできますが、アウトポイントの参照を解放することは意味しません。そのすべてがJVMからOSまでです。

+1

GCサイクルを手動で起動するのは、ほとんどの場合、JVMで使用される戦略を妨げるため – Henry

+0

@Henryありがとうございました。現在、AWS Serverが死ぬことがあります。どのように私はこの問題を解決することができます。私はオブジェクトを積極的に削除する必要があります –

+0

JVMがもう不要になっているオブジェクトへの参照を保持しないようにしてください。 – Henry

関連する問題