この記事で参照されているコードは、Epsilon GC に関する Oracle ブログで入手可能なサンプル コードから引用されています。
この記事では、Epsilon GC として知られる Java ガベージ コレクション (GC) の特に興味深いオプションについて説明します。このガベージ コレクション アルゴリズムは、ガベージ コレクションを実行しないという独特の機能で注目に値します。 Epsilon ガベージ コレクター (GC) は JDK 11 に含まれていました。
しかし、ガベージ コレクターが収集しないのに何の役に立つのでしょうか? (居候か!!)
いいえ、これは実際には非常に便利です。Oracle ブログで提供されているユースケースの 1 つで、より役立つように少し拡張しました。
詳細については、元のブログ投稿を参照してください:
https://blogs.oracle.com/javamagazine/post/epsilon-the-jdks-do-nothing-garbage-collector
使用例: Epsilon GC は、プロファイリング ツールを使用せずにコードの特定セグメントのメモリ割り当てを評価する必要がある開発者にとって有益です。
主な課題 従来のガベージ コレクターは、オブジェクトを継続的にクリアすることにより、正確なメモリ使用量のメトリクスを不明瞭にする可能性があります。この干渉により、コードの実際のメモリ消費量を確認することが困難になります。
Epsilon GC は、非コレクターとして機能することでこの問題に対処します。それ自体はガベージ コレクション アルゴリズムではありませんが、ガベージ コレクションの実行を控えることでメモリ割り当てを理解するためのツールとして機能し、それによってメモリ使用量を明確に把握できます。
注: Epsilon GC はメモリを再利用しないため、過剰な割り当てにより JVM で OutOfMemoryError (OOM) が発生する可能性があることに注意することが重要です。
以下は、Epsilon GC の有効性を実証するために使用されるサンプル コードです。:
public class EpsilonDemo { public static String formatSize(long v) { if (v期待:
このコードは、80MB のバイト型オブジェクトを割り当てます。コードを実行すると、print ステートメントでも同じことが観察できるはずです。EpsilonGC の有無にかかわらずコンパイルされたバージョンを実行します:
- G1GC で実行:
java -Xms100m -Xmx100m -XX: UseG1GC EpsilonDemo Starting allocations... *** Free MEM = 102.2 MB Completed successfully *** Free MEM = 74.2 MBG1GC では、28 MB 使用率という誤った割り当て状況が表示されます
- EpsilonGC で実行:
java -Xms100m -Xmx100m -XX: UnlockExperimentalVMOptions -XX: UseEpsilonGC EpsilonDemo [0.004s][warning][gc,init] Consider enabling -XX: AlwaysPreTouch to avoid memory commit hiccups Starting allocations... *** Free MEM = 99.4 MB Completed successfully *** Free MEM = 18.7 MBここでは 80.7 MB の使用率がはっきりとわかります
これが、コード内のメモリ使用パターンを見つけるのに EpsilonGC がいかに便利であるかを理解するのに役立つことを願っています。乾杯! ?
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3