java虚拟机的学习(八)~ JVM中常见参数配置

-XX:+PrintGC          每次触发GC的时候打印相关日志
-XX:+UseSerialGC        串行回收
-XX:+PrintGCDetails    更详细的GC日志
-Xms                  堆初始值
-Xmx                  堆最大可用值
-Xmn                  新生代堆最大可用值
-XX:SurvivorRatio  用来设置新生代中eden空间和from/to空间的比例.
-XX:NewRatio       配置新生代与老年代占比 1:2
含以-XX:SurvivorRatio=eden/from=den/to
总结:在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。

下面来说说堆内存大小配置:

使用示例:  -Xmx20m -Xms5m  

说明: 当下Java应用最大可用内存为20M, 初始内存为5M

使用示例: -Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC -XX:NewRatio=2

代码运行:

   public static void main(String[] args) {
        byte[] b = null;
        for (int i = 0; i < 10; i++) {
            b = new byte[1 * 1024 * 1024];
        }
    }

1、当jvm配置为: -Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC -XX:NewRatio=2 时;打印结果:

[GC (Allocation Failure) [DefNew: 2980K->1664K(5120K), 0.0046566 secs] 2980K->1681K(18816K), 0.0055934 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [DefNew: 4799K->1024K(5120K), 0.0027790 secs] 4817K->1680K(18816K), 0.0028189 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [DefNew: 4153K->1024K(5120K), 0.0005964 secs] 4810K->1680K(18816K), 0.0006278 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Heap
 def new generation   total 5120K, used 4226K [0x00000000fec00000, 0x00000000ff2a0000, 0x00000000ff2a0000)
  eden space 3456K,  92% used [0x00000000fec00000, 0x00000000fef20b88, 0x00000000fef60000)
  from space 1664K,  61% used [0x00000000ff100000, 0x00000000ff200010, 0x00000000ff2a0000)
  to   space 1664K,   0% used [0x00000000fef60000, 0x00000000fef60000, 0x00000000ff100000)
 tenured generation   total 13696K, used 656K [0x00000000ff2a0000, 0x0000000100000000, 0x0000000100000000)
   the space 13696K,   4% used [0x00000000ff2a0000, 0x00000000ff3443a0, 0x00000000ff344400, 0x0000000100000000)
 Metaspace       used 3458K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 379K, capacity 388K, committed 512K, reserved 1048576K
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
说明:配置对应这:堆内存初始化值20m,堆内存最大值20m,新生代最大值可用1m,eden空间和from/to空间的比例为2/1,新生代和老年代的占比为1/2

2、当jvm配置 -XX:+PrintGCDetails 时,即执行默认配置;打印结果:

Heap
 PSYoungGen      total 18432K, used 12466K [0x00000000eb580000, 0x00000000eca00000, 0x0000000100000000)
  eden space 15872K, 78% used [0x00000000eb580000,0x00000000ec1ac9c8,0x00000000ec500000)
  from space 2560K, 0% used [0x00000000ec780000,0x00000000ec780000,0x00000000eca00000)
  to   space 2560K, 0% used [0x00000000ec500000,0x00000000ec500000,0x00000000ec780000)
 ParOldGen       total 42496K, used 0K [0x00000000c2000000, 0x00000000c4980000, 0x00000000eb580000)
  object space 42496K, 0% used [0x00000000c2000000,0x00000000c2000000,0x00000000c4980000)
 Metaspace       used 3460K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 379K, capacity 388K, committed 512K, reserved 1048576K
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
eden空间和from/to空间的比例为8/1,新生代和老年代的占比为1/2

 

posted @ 2020-05-05 00:42  An-Optimistic-Person  阅读(112)  评论(0)    收藏  举报