首页 > 代码库 > JVM日志示例分析

JVM日志示例分析

引言: JVM分析和优化是Java技术体系中的高大上的内容,其实这个东西没有那么神秘和高深,只是大部分童鞋没有机会真正接触它们,从而对它们有一个深入理解。这里通过一个小题目,来展示如何来看JVM输出的日志信息,并得出JVM几个设置变量的设置信息。


1. 题目的提出,请分析最有可能的JVM的参数设置。

Heap

 def new generation   total 6464K, used 115K [0x34e80000,0x35580000, 0x35580000)

 eden space 5760K,   2% used[0x34e80000, 0x34e9cd38, 0x35420000)

 from space 704K,   0% used[0x354d0000, 0x354d0000, 0x35580000)

 to   space 704K,   0% used [0x35420000, 0x35420000, 0x354d0000)

 tenured generation   total 18124K, used 8277K [0x35580000,0x36733000, 0x37680000)

  the space 18124K,  45% used[0x35580000, 0x35d95758, 0x35d95800, 0x36733000)

 compacting perm gen  total 16384K, used 16383K [0x37680000,0x38680000, 0x38680000)

  the space 16384K,  99% used[0x37680000, 0x3867ffc0, 0x38680000, 0x38680000)

   ro space 10240K,  44% used[0x38680000, 0x38af73f0, 0x38af7400, 0x39080000)

    rw space 12288K,  52% used [0x39080000, 0x396cdd28, 0x396cde00,0x39c80000)

2.  JVM参数分析 

   2.1 -XX:+PrintGCDetails
    由于JVM需要打印出详细的GC回收和内存分布信息,故需要设置此变量

   2.2  -Xmx 最大堆空间设置

    def new generation为新生代的信息, tenured generation 代表的是年老代的信息。 其目前使用分配空间为6M.  [0x34e80000,0x35580000, 0x35580000): 分别代表最小地址,当前分配的空间地址,最大的空间地址。当前使用的空间是6M + 18M = 24M.

     由于x34e80000~~0x376800000之间分配的空间为40M,故当前的分配的空间不是设置的最大空间值,所以可知其设置了最大的内容空间,而且其最大空间xmx和最小空间xms不是一致的。

     故其-Xmx40M. 其无法得知是否已经设置xmx。

   2.3  -Xmn年轻带空间设置

       分析def new generation的信息,当前内存使用情况6464k,  eden space 5760k,  from/to space: 704k. 其最大空间地址和当前的地址空间位置一样:0x35580000,但是目前使用的内存并未完全使用完毕,故可推测知道,其设置年轻带的内存大小。

       其最大空间地址0x35580000 -  最小空间地址0x34e80000 = 7M.  故其-Xmn为7M.

  2.4 maxpermsize
        compacting perm gen表示永久代的信息,存放class信息,静态方法和变量,常量信息等。 其最大空间地址和当前空间地址一样,故可知其内存已经被全部分配了。另外,从使用率99%可知,基本使用完毕了。

       其最大空间地址0x38680000  - 最小空间地址0x37680000 = 16.7M. 故可知其最大的PermSize已经设置过了,但无法得知其初始设置的permsize大小。

        -XX:maxpermsize=17M.

3.  总结

    以上的文本示例来自于JVM中的内存分配片段,通过以上的分析,可以帮助大家来了解当前的内存状态信息,从而可以利用以上信息,来进行JVM的优化和调优。

    JVM参数: -Xmx40M -Xmn7M    -XX:maxpermsize=17M -XX:+PrintGCDetails verbose:gc


      

     

 

JVM日志示例分析