3

Java 6 (64 ビット) マシンで GC が実行されるデフォルトのスケジュールは、およそどのくらいですか? スケジュールなしでトリガーできることは知っていますが、それでもデフォルトの動作は何ですか?

Java が -server オプションと同じように動作するかどうかはわかりません。どうすればそれを確認できますか?Java プロセス コマンド ('ps ax|grep java' を実行したとき) には表示されませんが、とにかくサーバー モードで実行できますか? インストールされているjvmまたは物理サーバーのタイプに依存しますか? どうすればこれを知ることができるか教えてください。

4

3 に答える 3

4

まず、すべてのデフォルトの JVM 設定を出力するには、次を使用します。java -XX:+PrintFlagsFinal -version

デフォルトでは、JVM ホットスポットは-clientモードで実行されます。

スクリプトを開始するときに次のパラメータを使用して-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log、VM の起動時に設定されたすべてのプロパティ/引数を含むログを取得できます。

GC に関しては、デフォルトは JVM Ergonomics によって決定されます。 Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuningを参照してください。要するに :

コマンド ラインで特に設定しない場合、初期ヒープ サイズと最大ヒープ サイズはマシンのメモリ量に基づいて計算されます。マシンにインストールされているメモリの量に関係なく、デフォルトの最大ヒープ サイズは 1GB を超えません。

同じドキュメントでは、選択された GC アルゴリズムはハードウェアのセットアップに依存し、VM はシリアルコレクターとパラレルコレクターのどちらかを決定します。最終的にどちらが実行されているかを確認するには、GC ロギングを有効にします。

また、次の Q/A を確認してください:デフォルトの Java ヒープ サイズはどのように決定されますか?

于 2013-09-24T17:44:23.797 に答える
2

毎秒 10 MB のガベージを作成していて、100 MB の Eden スペースがある場合、いっぱいになるまでに 10 秒かかり、10 秒ごとに GC が表示されます。ガベージを少なくするか、Eden スペースを大きくすると、コレクションの間隔が長くなります。

「DGC」と呼ばれる 1 時間のデフォルト タイマーがあります。1 時間にわたって収集が行われなかった場合は、完全な GC をトリガーして、分散オブジェクトをクリーンアップできます。私は通常、これを1週間に設定しています。

デフォルトは

-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000

ところで、私は低遅延システムを設計しているので、Eden スペースを 1 日に作成されるゴミの量よりも大きくしています。システムが使用されていないときに、コードでトリガーされる完全なコレクションを 1 日 1 回実行します。このようにして、日中はコレクション、マイナーまたはメジャーを表示しません。

これは、Java での実際の低遅延取引システムの例です。

http://vanillajava.blogspot.com/2011/06/how-to-avoid-garbage-collection.html

ところで、Java 6 アップデート 25 はかなり古いので、Java 7 アップデート 40 ではないにしても、Java 6 アップデート 45 を検討します。

于 2013-09-24T13:58:29.187 に答える