为什么java代码缓存的大小在增长?
我有一个基本程序,它什么也不做,只是坐在那里等待输入:为什么java代码缓存的大小在增长?,java,performance,jvm-hotspot,code-caching,jvm-codecache,Java,Performance,Jvm Hotspot,Code Caching,Jvm Codecache,我有一个基本程序,它什么也不做,只是坐在那里等待输入: import java.io.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Basic { public static void main(String[] args) throws Exception{ try{ Buf
import java.io.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Basic {
public static void main(String[] args) throws Exception{
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
input=br.readLine();
}catch(IOException io){
io.printStackTrace();
}
}
}
当我运行这个时:
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15001 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false Basic
我通过JConsole连接以查看以下内容:
这仅仅是因为核心java bytcode首先被编译了吗?当进程没有做任何事情时,codecache怎么会增加
当我有了这个版本(它使用Thread.sleep
):
我明白了:
所以。。。为什么会这样
另外,这是java-version
的输出:
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) Client VM (build 20.12-b01, mixed mode, sharing)
我怀疑是
jconsole
本身造成了问题。或者更准确地说,jmxremote支持jconsole
查看JVM内部的情况
我的忠告是:
- 别担心。看起来它几乎达到了稳定状态
- 如果这还不够好,那么让
运行很长时间,观察内存使用量是否完全停止增长jconsole
- 如果这还不够好,那么你可以试着分析一下。。。尽管追踪jmxremote代码中的小存储泄漏(有或没有源代码)可能是一项挑战
main
线程没有做任何事情并不意味着JVM什么也没做。GC可能正在检查是否需要运行,并监视线程是否正在运行,以便JConsole能够工作。
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) Client VM (build 20.12-b01, mixed mode, sharing)