ホームページ  >  記事  >  Java  >  Java 仮想マシン学習 - メモリ チューニング

Java 仮想マシン学習 - メモリ チューニング

黄舟
黄舟オリジナル
2017-02-17 10:32:001583ブラウズ

JVM チューニングは主に、各世代のサイズや GC 戦略の制御などのメモリ管理チューニングを目的としています。 GC はガベージ コレクションの開始時にアプリケーション スレッドを一時停止し、パフォーマンスに重大な影響を与えるため、チューニングの目的は、GC によるアプリケーション スレッドの一時停止時間を最小限に抑え、フル GC の数を減らすことです。

世代サイズの調整

最も重要なパラメータ: -Xms、-Xmx、-Xmn、-XX:SurvivorRatio、-XX:MaxTenuringThreshold、-XX:PermSize、-XX:MaxPermSize

-Xms と -Xmx は、実行時に JVM メモリが継続的に拡張されるのを避けるために、通常は同じ値に設定されます。この値は、JVM ヒープが使用できる最大メモリを決定します。

-Xmn は、新世代スペースのサイズを決定します。新世代 Eden、S0、S1 の 3 つの領域の比率は、-XX:SurvivorRatio によって制御できます (値が 4 の場合、Eden を意味します)。 :S0:S1 = 4 :3:3 )

-XX:MaxTenuringThreshold は、マイナー GC 後にオブジェクトが古い世代に入る回数を制御します。このパラメータは Serial シリアル GC でのみ有効です。

-XX:PermSize、-XX:MaxPermSize はメソッド領域のサイズを制御するために使用され、通常は同じ値に設定されます。

1. 新しい世代のサイズを小さくしすぎると、2 つの明らかな現象が発生します。マイナー GC が頻繁に発生すること、もう 1 つはマイナー GC オブジェクトが古い世代に直接入る可能性があることです。古い世代のメモリが不足すると、フル GC がトリガーされます。

2. 新しい世代を大きく設定しすぎると、次の 2 つの問題が生じます。まず、古い世代が小さくなり、頻繁なエラーが発生する可能性があります。フル GC の実行: 秒 マイナー GC のリサイクルにかかる時間が大幅に増加します。

3. Survivor エリアが大きすぎたり小さすぎたりしないようにします

-XX: SurvivorRatio パラメータの値が大きいほど、

Eden エリアが大きくなり、マイナー GC の数は減少しますが、
Survivor 領域のメモリ サイズを超えるオブジェクトがマイナー領域にある場合は、2 つの
Survivor 領域が小さくなります。 GC 後もリサイクルされない場合は、直接古い時代に入ります。小さくなり、マイナー GC トリガーの数が増加します。
Survivor 領域が大きくなり、より多くのものがマイナーに保存できることを意味します GC 後に残ったオブジェクトは古い時代に入ることが防止されます。

4. 新世代におけるオブジェクトの生存期間を合理的に設定します

新世代の生存期間の値により、新世代オブジェクトが何回入るかが決まります。マイナーGC時代を経た旧世代。したがって、この値は独自のアプリケーションに応じて調整する必要があります。Jvm パラメータのこの値は -XX:MaxTenuringThreshold に対応し、デフォルト値は 15 倍です。

GCチューニング

1.GCマッチング

別のガベージコレクターを参照

2. JVMパラメータを表示します

コマンドラインツール ビジュアルツール

3.GCログパラメータ

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:c:javagc .log


上記は Java 仮想マシン学習 - メモリ チューニングの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。