私は、ReservedCodeCacheSize = 128MとUseCodeCacheFlushingを有効にして、Oracle Java 8 JVM(サーバーではなく、クライアントでも組み込みでもない)を実行しています。数日後、コーデックキャッシュは93%から80%に急速に落ちました。私はコーデックキャッシュのフラッシュを目撃したと仮定していると仮定しますが、フラッシュ後のサイズが50%フル以上の100%に近いことは驚くべきことでした。Oracle JVM 8:コードキャッシュのフラッシュが有効な場合、フラッシュされる量はいくらですか?
JVMは、どのくらいの量のCodecacheをフラッシュするかを決定します。
This Oracle Java 8 pageは、オプションが記載されているが、フラッシュCodecacheを定量化しません:
は、コンパイラをシャットダウンする前に、コードキャッシュのフラッシュを有効にします。このオプションは、デフォルトで有効になっています。コンパイラをシャットダウンする前にコードキャッシュのフラッシュを無効にするには、-XX:-UseCodeCacheFlushingを指定します。
This Oracle blog postはCodecacheのフラッシュを制御するために使用することができますJVMオプションUseCodeCacheFlushingがあり、
を言います。このオプションを有効にすると、JVMは、がコンパイル済みコード(旧式)の古い半分を破棄してCodeCacheでスペースを使用できるようにする、緊急フラッシュを呼び出します。
コンパイルされたコードの半分がコーデック全体の20%にすぎないと考えられますが、上記のブログ投稿は不正確です。
OpenJDKのソースを参照しました。 Oracle JVMが同じアルゴリズムを使用していると思いますか? – user100464
@ user100464はい、OpenJDKとOracle JDKはOpenJDKバージョンのJVMに特定の商用機能がないことを除いて、同じHotSpot JVMを実行します。 – apangin