2016-08-26 6 views
5

ガベージコレクションについて多くの質問がありましたが、私はそれらを通過しましたが、まだ疑問があります。Javaでのガベージコレクションの疑問

  1. 我々はガベージコレクションのJVMを強制することはできません場合は、System.gc()の必要性は何ですか?どのシナリオでそれは有用ですか?

  2. 私は[エデン、SO、S1]若い世代と旧世代とどのようにオブジェクトに関する古い世代に若い世代から移動している知っています。オブジェクトは永続的な世代にいつ移動されますか?例えば、mycarオブジェクトには参照があり、ガベージコレクションの対象にはなりません。mycarオブジェクトは永続的に生成されますか?

  3. 私は静的変数は、永続的な世代に格納されていることを読みました。それらはガベージコレクションされ、永続的な世代にはどのようなオブジェクトが格納されますか?静的変数が永続世代に格納されている理由と、永続世代を使用する理由は何ですか?

  4. 私はオブジェクトがヒープメモリに格納されていることを知っています。すべてのアプリケーションに独自のヒープメモリがあるのは本当ですか?

  5. はそれがSystem.gc()を呼び出すと、アプリケーションのパフォーマンスを低減し、我々のアプリケーションを遅くするというのは本当でしょうか?また、ガベージコレクションがJVMによって行われると、アプリケーションのパフォーマンスが低下し、アプリケーションの動作が遅くなる可能性があります。

  6. はどのケースでは、部分的ガベージコレクションが行われていると主なガベージコレクションが実行されたとき?

+1

4)はい。すべてのアプリケーションには独自のヒープメモリがあります。 Uは、同じシステムで2つのdiff javaアプリケーションを実行することでこれを確認し、最大&ヒープサイズを提供することができます。 –

+1

5)どのタイプのGCが起こっているかによって異なります。フルGCの場合、フルGC時間のアプリケーションを停止できる世界が停止します。これは、部分的なGCの場合には発生しません。 –

+0

その場合、部分的および主要なgcが実行されます – FaisalAhmed

答えて

3

1)System.gc()が頻繁に機能します。あなたがガベージコレクションを強制することができないと言う人が何を意味するかは、JVMはメモリの状態についてあなたが知っているよりも、ガベージコレクションを強制することはできません。

2)私は間違っている可能性がありますが、ユーザー生成クラスはそれをperm genにするとは思わないし、常に必要とされるクラスや内部文字列(pre Java 7)などのメタ情報を格納するために存在するJVMによって。

3)静的変数は、彼らが宣言されているclassによって参照されています。クラスは永続的な生成に格納されるので、静的な変数は常に参照されるので、permの生成にも意味があります。

4)はい。コメントから

編集: ガベージコレクションは、永続的な世代で行われることはありません。私は正しい?

ガベージコレクションは複雑です!パーマネントはヒープの残りの部分よりもはるかに揮発性が低く、そこにあるオブジェクトが下部の空間で他のオブジェクトを参照する可能性が非常に高いです。私はガベージコレクションとパーマネントジェネレーションの動作があなたが使用しているJavaのバージョンに依存していると思います。新しいバージョンではperm genをガベージコレクションします.Javaはプロキシオブジェクトを大量に使用するので意味があります。

+0

永続的な世代に格納されている他のものは何ですか? – FaisalAhmed

+0

私は自分の答えを更新しました。 – StuPointerException

+0

文字列は永続化世代に格納されますか? – FaisalAhmed

1

1)頻繁に繰り返される陳述が真実でありながら、誤解を招くことがあります。メソッドの仕様(つまりjavadocs)は、noopの実装を有効にする方法で表現されています。言い換えれば、何かを行うか、非同期的にしか何もしないという仕様保証はありません。

しかし、実装ははるかに強力な動作を提供できます。言い換えれば、System.gcは実装と構成に依存し、ある状況ではが常にすべての呼び出しでGCを起動するということです。

2)パーマgenは前のjava 8

3)彼らは

4)「アプリケーション」あまりにもあいまいで、実行できている複数のアプリケーションが上ではないとホットスポットJVMの実装の詳細です共有JVM JVMごとに1つのマネージドヒープがあります。

5)これらは2つの異なる質問です。

6)JVM実装と選択されたGCアルゴリズムによって異なります。私はあなたがドキュメントを読むことをお勧めします。

関連する問題