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

浙公网安备 33010602011771号