GC日志的学习

基本参数了解

堆大小设置

-Xms20m -Xmx20m

New Generation(新生代)内存大小设置

Xmn256m

新生代和老年代内存的比值来设置新生代大小
-XX:NewRatio=3
设置新生代(包括Eden和两个Survivor区)与老年代的比值(除去持久代)。设置为3,则新生代与老年代所占比值为1:3,新生代占整个堆栈的1/4

Survivor内存大小设置

-XX:SurvivorRatio=8

设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个新生代的1/10

Old Generation(老年的)的内存大小设置

堆内存减去新生代内存
如上面设置的参数举例如下:
老年代初始内存为:512M-256M=256M
老年代最大内存为:1G-256M=768M

详解

测试代码,运行参数设置为:-Xms20m -Xmx20m -XX:+PrintGC -XX:+PrintGCDetails -Xloggc:gc.log

public class GcTest {
	static int size =  4 * 1024 * 1024;
	public static void main(String[] args) throws InterruptedException {
		byte[] a1 = new byte[size];
		TimeUnit.SECONDS.sleep(1);
		byte[] a2 = new byte[size];
		TimeUnit.SECONDS.sleep(1);
		byte[] a3 = new byte[size];
		TimeUnit.SECONDS.sleep(1);
		byte[] a4 = new byte[size];
		TimeUnit.SECONDS.sleep(1);
		System.out.println("ok");
	}
}
  • YoungGC日志
    2.186: [GC (Allocation Failure) [PSYoungGen: 990K->488K(6144K)] 11230K->10808K(19968K), 0.0013081 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
  • Full GC
    3.191: [Full GC (Ergonomics) [PSYoungGen: 5608K->5531K(6144K)] [ParOldGen: 10372K->10342K(13824K)] 15980K->15874K(19968K), [Metaspace: 2589K->2589K(1056768K)], 0.0042786 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
  1. 最前面的数字2.186:和’3.191:'代表了GC发生的时间,这个数字的含义是从aⅤa虚拟机启动以来经过的秒数。

  2. GC日志开头的[GC[Full GC说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的。如果是Full GC,说明这次GC是发生了Stop-The-World的,
    第二条收集器的日志也会出现[Full GC(这一般是因为出现了分配担保失败之类的问题,所以才导致STW)。如果是调用 System.gc()方法所触发的收集,那么
    在这里将显示[ Full gc( System)

  3. 接下来的[PSYoungGen[ParOldGen[Metaspace表示GC发生的区域,这里显示的区域名称与使用的GC收集器是密切相关的,如果是 ParNew收集器,新生代名称
    就会变为[ ParNew,意为Parallel New Generation。如果采用 Parallel Scavenge收集器,那它配套的新生代称为PSYoungGen,老年代和永久代同理,名称也是由收集器决定的。

  4. 后面方括号内部的990K->488K(6144K)含义是GC前该内存区域已使用容量->GC后该内存区域已使用容量(该内存区域总容量)。而在方括号之外的11230K->10808K(19968K)表示GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)

  5. 再往后,0.0013081 secs表示该内存区域GC所占用的时间,单位是秒。后面是更具体的时间数据,[Times: user=0.00 sys=0.00, real=0.00 secs],这里面的
    user、sys和real与 Linux的time命令所输出的时间含义一致

  • user:代表用户态消耗的CPU时间
  • sys:内核态消耗的CPU事件
  • real:操作从开始到结束所经过的墙钟时间( Wall Clock Time)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值