深入浅析JVM中的参数分配?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
- xx: + PrintGC使用这个参数,虚拟机启动后,只要遇到GC就会打印日志
- xx: + UseSerialGC配置串行回收器
- xx: + PrintGCDetails可以查看详细信息,包括各个区的情况
xms:设置Java程序启动时初始化堆大小
- xmx:设置Java程序能获得最大的堆大小
-Xmx20m -Xms5m - xx: + PrintCommandLineFlags:可以将隐式或者显示传给虚拟机的参数输出
在实际工作中,我们可以直接将初始的堆大小与最大堆大小设置相等,这样的好处是可以减少程序运行时的垃圾回收次数,从而提高性能。
- xx: + PrintGC -Xms5m -Xmx20m - xx: + UseSerialGC - xx: + PrintGCDetails - xx: + PrintCommandLineFlags
<强>运行一下演示:强>
包com.ietree.basicskill.jvm; 公开课Demo01 { 公共静态void main (String [] args) {//- xx: + PrintGC -Xms5m -Xmx20m - xx: + UseSerialGC - xx: + PrintGCDetails - xx: + PrintCommandLineFlags//查看GC信息 System.out.println (max记忆:“;+ Runtime.getRuntime () .maxMemory ()); System.out.println(“空闲内存:“+ Runtime.getRuntime () .freeMemory ()); System.out.println(“总内存:“+ Runtime.getRuntime () .totalMemory ()); byte [] b1=new字节(1 * 1024 * 1024); System.out.println(“分配了1 m"); System.out.println (max记忆:“;+ Runtime.getRuntime () .maxMemory ()); System.out.println(“空闲内存:“+ Runtime.getRuntime () .freeMemory ()); System.out.println(“总内存:“+ Runtime.getRuntime () .totalMemory ()); byte [] b2=new字节(4 * 1024 * 1024); System.out.println(“分配了4 m"); System.out.println (max记忆:“;+ Runtime.getRuntime () .maxMemory ()); System.out.println(“空闲内存:“+ Runtime.getRuntime () .freeMemory ()); System.out.println(“总内存:“+ Runtime.getRuntime () .totalMemory ()); } }
程序输出:
- xx: InitialHeapSize=5242880 - xx: MaxHeapSize=20971520 - xx: + PrintCommandLineFlags - xx: + PrintGC - xx: + PrintGCDetails - xx: + UseCompressedClassPointers - xx: + UseCompressedOops - xx: -UseLargePagesIndividualAllocation - xx: + UseSerialGC 最大内存:20316160 空闲内存:5286032 总内存:6094848 [GC(分配失败)[DefNew: 789 k→191 k (1856 k), 0.0026441秒]789 k→530 k (5952 k), 0.0027627秒][:用户=0.00 sys=0.00,真实=0.00秒) 分配了1米 最大内存:20316160 空闲内存:4469352 总内存:6094848 [GC(分配失败)[DefNew: 1249 k→0 k (1856 k), 0.0022285秒][k终身:1554→1554 k (4096 k), 0.0031394秒]1587 k→1554 k (5952 k), [Metaspace: 2597 k→2597 k (1056768 k)], 0.0054980秒][:用户=0.00 sys=0.00,真实=0.01秒) 分配了4米 最大内存:20316160 空闲内存:4538184 总内存:10358784 堆 使用def新一代总1920 k, 68 k [0 x00000000fec00000 0 x00000000fee10000 0 x00000000ff2a0000) 伊甸园空间1728 k, 3%使用[0 x00000000fec00000 0 x00000000fec113e0 0 x00000000fedb0000) 从太空192 k, 0%使用[0 x00000000fedb0000 0 x00000000fedb0000 0 x00000000fede0000) 空间192 k, 0%使用[0 x00000000fede0000 0 x00000000fede0000 0 x00000000fee10000) 终身代总8196 k, 5650 k [0 x00000000ff2a0000 0 x00000000ffaa1000 0 x0000000100000000) 空间8196 k, 68%使用[0 x00000000ff2a0000, 0 x00000000ff824888 0 x00000000ff824a00 0 x00000000ffaa1000) Metaspace使用2603 k,预留容量4486 k, 4864 k, 1056768 k 类空间使用288 k,容量386 k, 512 k,保留1048576 k
在此程序输出的结果中,可以看到堆的详细信息,比如可以看到它的新生代信息,老年代信息,永久区信息等。
<强>厦门:强>可以设置新生代的大小,设置一个比较大的新生代会减少老年代的大小,这个参数对系统性能以及GC行为有很大的影响,新生代大小一般会设置整个堆空间的1/3到1/4左右。
- <强> XX: SurvivorRatio: 强>用来设置新生代中伊甸园空间和从/到空间的比例。含义:- XX: SurvivorRatio=伊甸园/从=伊甸园/?br/>不同的堆分布情况,对系统执行会产生一定的影响,在实际工作中,应该根据系统的特点做出合理的配置,基本策略:尽可能将对象预留在新生代,减少老年代的GC次数。
除了可以设置新生代的绝对大小(厦门),还可以使用(- XX: NewRatio)设置新生代和老年代的比例:- XX: NewRatio=老年代/新生代。
-Xms20m -Xmx20m -Xmn1m - XX: SurvivorRatio=2 - XX: + PrintGCDetails