Javaプログラムを実行しているときに-Xmx引数を追加すると、ガベージコレクタが異なる動作をするか、あまり頻繁に発生しませんか?Javaプログラムの最大メモリの設定はGCに影響しますか?
答えて
はい、ほとんどのJavaガベージコレクタは、必要に応じて実行するのではなく、必要に応じて実行されます。したがって、一般的に、メモリが増えるほど頻繁ではなく、ガベージコレクションが長くなります。
世代別ガベージコレクタには、settings to control the allocation of memory between the young and tenured generations.があります。これらを若い世代に使用するメモリの割合を小さくするように設定することで、若い世代の絶対サイズを、全体のヒープサイズが大きくなるのと同じに保つことができます。その後、ガベージコレクションの頻度や期間が大幅に変更されることはありませんが、キャッシングのようなアプリケーションでは長期間使用できるオブジェクトの容量が増えます。
一般的な答えは、ゴミが頻繁に収集されない傾向がありますが、GCの休止時間は長くなる傾向があります。
これは、すでにVMに使用可能なメモリが作業セットサイズよりも大きいと想定しています。それ以外の場合は、ガベージコレクションに多くの時間を費やしている可能性があります。
GCの特性は、使用するコレクタとJavaのバージョン、およびより高い-Xmxに加えて-Xmsを指定したかどうかによって大きく異なります。古いバージョンのJava(5以前)では、VMの初期化後に若い世代の領域のサイズが変更されませんでした。だからあなたが本当に大きな-Xmx値を指定したとしても、若い世代のサイズはまだまだ小さいので、若い世代のコレクションが頻繁に見られます。
若い世代のコレクションが発生すると、短期間のオブジェクトであっても、とにかくテナントスペースに昇格されるいくつかの「若い」オブジェクトが存在します。これは、年長の世代が死んだ若いオブジェクトでゆっくりいっぱいになり、定期的な完全なGCを必要とすることを意味します。テンポラリ世代で終わるこのようなオブジェクトの数は、若いGCの数に比例します(プログラムでは一定のアクティビティを想定しています)。したがって、若い世代のメリットは若い世代のGCが少なくなるため、若手コレクションのオブジェクトが少なくて済み、テナント世代に昇格されることです。
-Xmx(google for java gc)以外にもいくつかのチューニングパラメータがあります。アプリケーションごとに最適な設定が異なるため、実験する必要があります。
はい、使用しているガベージコレクタによって異なります。 GC tuning pageは、この種の質問に適したリソースです。
これは、より多くのメモリがある場合、収集して圧縮するために、より多くのスキャンを行うためです。これは、(完全な)GCが起動すると、より多くのメモリをスキャンしなければならず、メモリをよりコンパクトにする必要があることを意味します。多分もっと多くの文脈で私たちはさらに助けてくれるでしょう。明らかに3つの異なるセクションがスキャンされるので、必ずしも1-1の意味で直接相関するとは限りません。
間接的に、しばらくの間実行した後。 -Xmxは、ヒープの拡張が可能な最大サイズを設定し、初期サイズには影響しません。したがって、プログラムの実行の初期段階では、gcの時間や頻度には影響しません。 gcの後にヒープがいっぱいになると、heapsizeが増加し、これが-Xmxに影響します。 -Xmxの設定を高くすると、ヒープが大きくなり、コレクションのトリガ回数が少なくなります(また、コレクションの記述には時間がかかります)。
しかし、アプリケーションであまりにも多くのメモリを使用しない(gcの後にヒープがほとんど空になるように)ため、ヒープが大きくならず、-Mxの設定は無関係になります。
-Xmsを使用して、初期GCヒープサイズを設定できます。これはガベージコレクションに直ちに影響します。
- 1. GC Clojure/Java/JVMメモリ設定
- 2. LOHのオブジェクトを固定するとGCのパフォーマンスに影響しますか?
- 3. Javaのストリームはどのようにメモリ消費に影響しますか?
- 4. WebファームのネットワークロードバランサはGCの影響を受けますか?
- 5. 空のカラムを含む結果セットのJava Beanはメモリ/サイズに大きな影響を及ぼしますか?
- 6. ThreadPool SetMinThreads - 設定の影響
- 7. dmpファイルの作成はプログラムのパフォーマンスに影響しますか?
- 8. console.logsがシングルページアプリケーションの/タブのメモリとパフォーマンスに影響しますか?
- 9. gcc -gデバッグフラグはプログラムの実行に影響しますか?
- 10. SQL Serverの最大メモリ設定
- 11. ストーリーボードビュー(iphone 4/5/6)レイアウトは、コレクションセルサイズに影響を与えます(プログラム設定)
- 12. Javaクラスのサイズはアプリケーションのパフォーマンスに影響しますか
- 13. java stream.peek()はどのようにバイトコードに影響しますか?
- 14. プログラムで最大のJavaヒープサイズを設定する
- 15. mavenのwsdlDirectory設定に影響がありますか?
- 16. Javaの弱い/少ない特定のタイプはパフォーマンスに影響しますか?
- 17. final修飾子はJavaのシリアル化に影響しますか?
- 18. Javaプログラムコードのエンコーディングはコンパイルに影響しますか?
- 19. MtouchSdkVersionの設定は、実行可能なiOSのバージョンに影響しますか?
- 20. ブラウザのデフォルト言語設定は、Cookieの言語に影響しますか?
- 21. コンソールアプリケーションの最小化はパフォーマンスに影響しますか?
- 22. 幅が自動に設定されている場合、ダイアログの最大幅は影響を受けません
- 23. Spark DriverのメモリはExecutorリソースにどのように影響しますか?
- 24. 大きなXMLファイルは速度に影響しますか?
- 25. 大きなトランザクション・ログはパフォーマンスに影響しますか?
- 26. メモリ内のシェーダーの数はパフォーマンスにどの程度影響しますか?
- 27. 大きなクラスの小さなクラスを持つことによるGCの影響は何ですか?
- 28. Gitではどのような設定がユーザ名に影響しますか?
- 29. proxy_read_timeout設定はNginx(Kong)に影響しません
- 30. grailsの一時的なプロパティはアプリケーションのメモリ使用に影響しますか?