有没有办法在Java中监视已编译的代码缓存?

时间:2010-03-03 00:48:26

标签: java

好的 - 我知道我可以像这样运行我的java进程:

java -XX:+PrintCompilation <FooProgram>

我可以看到输出:

c:\>java -XX:+PrintCompilation -jar c:\FooProgram.jar
  1       java.lang.String::charAt (33 bytes)
  2       java.lang.Math::max (11 bytes)
  1%      java.util.jar.JarFile::hasClassPathAttribute @ 78 (197 bytes)
  3       java.lang.String::hashCode (60 bytes)
  4       java.lang.String::indexOf (151 bytes)
  5       java.util.Properties$LineReader::readLine (452 bytes)
  6       java.lang.Object::<init> (1 bytes)
  7       java.lang.String::indexOf (166 bytes)
  8       java.lang.String::equals (88 bytes)

让我知道哪些方法是编译的,未编译的,标记为僵尸等等。是否有监控编译这些方法的代码缓存的用法?当编译器代码缓存已满时,我看到一条消息,上面写着:“我已经满了,没有更多的编译对你......”,但似乎这样的事情似乎是一个滞后指示我们遇到了问题。我知道如何打印代码缓存的最大大小,我正在寻找的是一种方式来查看它是如何填充的。

3 个答案:

答案 0 :(得分:2)

老问题但......我还是会回答...... 我已经构建了一个VisualVM插件,它将监视有关代码缓存的统计信息。它已包含在开源版本插件存储库中。或者,您可以从java.net下载它和源代码。

哎呀,忘了链接...... https://java.net/projects/memorypoolview/

答案 1 :(得分:1)

JConsole会告诉你。您还可以在应用服务器中安装Java-monitor,并在主机的“查看所有测量”页面中查看代码缓存。 http://java-monitor.com

答案 2 :(得分:1)

自Java 8起,您可以使用-XX:+PrintCodeCache个详细信息can be found in this paper