JConsole是JDK里面自带的一个工具,可以监控CPU,内存和线程等动态数据。当我们刚开始学习JConsole时,经常会发现我们监控的程序里内存使用块始终保持着变化,而且是有规律的锯齿状。就算我们坚信程序在这段时间没有任何的操作,停止在阻塞状态下,这个齿状的线条依旧。打开JConsole的相关文档,里面没谈到这点,而它上面举的例子也是一个个锯齿状的线条。这个线条举例如下:
为了测试,写一段程序代码如下:
public static void main(String[] args) throws IOException
{
int size = 10;
if( args.length > 0)
size = Integer.parseInt(args[0]);
byte[] bytes =new byte[1024*1024*size];
System.out.println( bytes.length );
System.in.read();
}
命令为java -Dcom.sun.management.jmxremote MemTest。
当程序不带参数时,它申请一个大约10M的内存空间,然后阻塞在IO上等用户输入。在JConsole的内存监控图形上,切换到具体的内存块上,我们可以看到,这10M的内存分配到旧生代上,而齿