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