3

我正在使用 jconsole 监控 javaDB(derby),我的 java 版本是 1.6.0_27。

正如我在本文中所读到的,CodeCache 已满。编译器已被禁用

  • 我认为没有-XX:+UseCodeCacheFlushing就不会刷新CodeCache
  • -XX:+UseCodeCacheFlushing直到 1.7.0_4 才自动开启。

但是 jconsole 显示 CodeCache 的使用率下降了,这让我很惊讶:

CodeCache 使用率下降

对此有什么解释吗?CodeCache 除了 JIT 编译方法还有什么?

4

1 回答 1

1

原因可能仍然是选项:UseCodeCacheFlushing=true。JDK 3 的默认配置如下:

$ java -XX:+PrintFlagsFinal -version | grep CodeCacheFlush
 bool UseCodeCacheFlushing                      = true                                {product}

java 版本 "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b18) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, 混合模式)

$ ./java -XX:+PrintFlagsFinal -version | grep CodeCacheFlush
uintx CodeCacheFlushingMinimumFreeSpace         = 1536000         {product}
 intx MinCodeCacheFlushingInterval              = 30              {product}
 bool UseCodeCacheFlushing                      = true            {product}

java 版本 "1.7.0_79" Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, 混合模式)

$ java -XX:+PrintFlagsFinal -version | grep CodeCacheFlush
uintx CodeCacheFlushingMinimumFreeSpace         = 1536000         {product}           
 intx MinCodeCacheFlushingInterval              = 30              {product}           
 bool UseCodeCacheFlushing                      = true            {product}           

Java 版本“1.7.0_51”Java(TM) SE 运行时环境(构建 1.7.0_51-b13)Java HotSpot(TM) 64 位服务器 VM(构建 24.51-b03,混合模式)

于 2016-08-12T02:09:05.703 回答