2016-07-28 6 views
1

私は少しのメモリを割り当てている非常に短いプログラムを考えてみましょう。私は、プログラムが大量のメモリを割り当て、割り当てが限界に達する状況でGCが動作すると教えられました。GCが実行されず(実行する必要があります)、プログラムの実行が終了したらどうなりますか?

私はその制限が正確ではないが、GCが頻繁に実行されず、プログラムの実行が遅くなるほど十分に高くなければならないと思う。

私の質問は、プログラムの存続期間中、GCが実行準備をするレベルに達していないとどうなりますか。メモリリークの原因になりますか?

+0

これはJDKに関するものではありません – Andremoniy

+0

そのタグを削除しました –

答えて

1

を参照してください?

非常に単純です:完全なメモリはオペレーティングシステムに「返され」、再び利用可能になります。簡単な言葉で

:あなたのJVMは、それがメモリ不足ことを発見した場合

  1. あなたのJVMを起動し、xxのメモリのMBは、GCキックは取り除くために、で、それ
  2. に与えられています/どのくらいの頻度は、2が起こった段階ならばゴミの
  3. があなたのJVMが終了するが、それらのXX MBは、ステップ3では、オペレーティング・システム

に戻ったとき(JVMが実行し続けることができるように)、それは絶対に無関係です。

最後に、「ヒープ」は、JVMが内部的にどのようにメモリを使用しているかを示します。 OSは、JVMに与えた絶対的なメモリチャンクについて知っているだけです。

+0

メモリがヒープの場合でも、 –

+0

私の更新を参照してください.. – GhostCat

+0

ありがとう:) –

2

何も起こりません。大まかに言って:Javaプロセスに割り当てられたメモリがヒープに戻ります。 具体的には、JVMはJavaプロセス用にメモリを割り当てるためにネイティブメモリを使用します。 Javaプロセスが終了すると、このメモリはオペレーティングシステム内の他のプロセスで使用できるようになります。 このようなことについてもっと読むことをお勧めします。ここではこれ以上のメモリが存在しない場合にのみ、http://www.ibm.com/developerworks/library/j-nativememory-linux/

2

ガベージコレクションが実行されない、パラレルコレクタは実際には別のスレッドで実行され、それはそれを行うための時間を持って判断した場合に収集ので、だけの戦略ではありません。 GCが実行されている前に、あなたのJVMが終了した場合、メモリに何が起こるか:あなたの質問がある場合は

Java garbage collector - When does it collect?

関連する問題