Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有什么方法可以监视Java中的编译代码缓存吗?_Java - Fatal编程技术网

有什么方法可以监视Java中的编译代码缓存吗?

有什么方法可以监视Java中的编译代码缓存吗?,java,Java,好的-我知道我可以像这样运行java进程: java -XX:+PrintCompilation <FooProgram> java-XX:+print编译 我可以看到如下输出: c:\>java -XX:+PrintCompilation -jar c:\FooProgram.jar 1 java.lang.String::charAt (33 bytes) 2 java.lang.Math::max (11 bytes) 1%

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

java -XX:+PrintCompilation <FooProgram>
java-XX:+print编译
我可以看到如下输出:

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

让我了解编译、解编译、标记为zombies的方法等。是否有任何方法可以监控这些方法编译到的代码缓存的使用情况?当编译器代码缓存已满时,我会看到一条消息,如:“我已满,不再为您编译…”,但这似乎是我们遇到问题的滞后指示。我知道如何打印代码缓存的最大大小,我所寻找的实际上是一种查看其随时间填充情况的方法。

JConsole会告诉您。您还可以在应用服务器中安装Java monitor,并在主机的“查看所有度量”页面中查看代码缓存

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


哦,忘记链接了

既然Java 8可以使用
-XX:+PrintCodeCache
更多详细信息

您好,您说得对。我今天早上发现——如果有一个-XX标志打印出代码缓存,那就太好了,天哪,甚至可能是里面到底有什么。谢谢你的回复。真的,那太好了。您是否尝试过进行堆转储并使用内存分析器进行分析?或者,检查在代码中生成动态类(例如代理)的位置,并查看该代码是否正常?我似乎找不到它。@Mattforsyth当您切换图表选项时,JConsole在“内存”选项卡上显示“代码缓存”。如果您提到所述插件的名称和/或其链接,这将有助于人们阅读此插件。-XX:+PrintCodeCache在应用程序退出时仅提供单个输出。根据所附文件,还有一个
-XX:+PrintCodeCache编译
选项,该选项也会产生与
-XX:+PrintCodeCache
相同的输出,但每次编译方法时都会这样做。这可能更适合问题的作者。记住在JVM选项
–Xmx1G#不正确:en-dash
-Xmx1G#正确:连字符减号
之前使用连字符减号(而不是en-dash(U+2013)),因为我在前面的评论中使用了不正确的en-dash(U+2013):)