92

誰かがJVMオプションReservedCodeCacheSizeInitialCodeCacheSizeは何かを説明できますか? 具体的には、いつ/なぜ変更したいのですか? 適切なサイズはどうやって決めるのですか?

これはドキュメントが言うことです:

-XX:ReservedCodeCacheSize=32m 予約済みコード キャッシュ サイズ (バイト単位) - 最大コード キャッシュ サイズ。[Solaris 64 ビット、amd64、および -server x86: 2048m; 1.5.0_06 以前では、Solaris 64 ビットおよび and64: 1024m.]

4

4 に答える 4

77

ReservedCodeCacheSize(およびInitialCodeCacheSize) は、Java Hotspot VM の (ジャストインタイム) コンパイラのオプションです。基本的に、コンパイラのコード キャッシュの最大サイズを設定します。

キャッシュがいっぱいになると、次のような警告が表示されます。

Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled.
Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize=
Code Cache  [0x000000010958f000, 0x000000010c52f000, 0x000000010c58f000)
 total_blobs=15406 nmethods=14989 adapters=362 free_code_cache=835Kb largest_free_block=449792

が続くとさらに悪化しJava HotSpot(TM) Client VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGINT to handler- the VM may need to be forcibly terminatedます。

このオプションをいつ設定しますか?

  1. Hotspot コンパイラに障害が発生した場合
  2. JVM が必要とするメモリーを削減する (したがって、JIT コンパイラーの失敗のリスクを冒す)

通常、この値は変更しません。この問題は非常にまれにしか発生しないため(私の経​​験では)、デフォルト値は非常にバランスが取れていると思います。

于 2011-09-22T19:22:29.483 に答える
0

https://blogs.oracle.com/poonam/entry/why_do_i_get_messageから:

以下は、CodeCache のフラッシュに関する jdk7u4+ の 2 つの既知の問題です。

  1. 緊急フラッシュ後に CodeCache の占有率がほぼ半分に下がった後でも、コンパイラが再起動されない場合があります。
  2. 緊急フラッシュにより、コンパイラ スレッドによる CPU 使用率が高くなり、全体的なパフォーマンスが低下する可能性があります。

このパフォーマンスの問題と、コンパイラが再び有効にならないという問題は、JDK8 で対処されています。JDK7u4+ でこれらを回避するには、ReservedCodeCacheSize オプションを使用してコンパイル済みコードのフットプリントよりも大きな値に設定することでコード キャッシュ サイズを増やし、CodeCache がいっぱいにならないようにすることができます。これに対する別の解決策は、-XX:-UseCodeCacheFlushing JVM オプションを使用して CodeCache フラッシュを無効にすることです。

上記の問題は、JDK8 およびその更新で修正されています。

そのため、JDK 6 (コードのフラッシュが無効になっている) および 7 で実行されているシステムについて言及する価値があるかもしれません。

于 2016-10-04T17:51:38.820 に答える