JVM 垃圾回收日志 与 算法深度解读

GC的时机
在分代模型的基础上,GC从时机上分为两种:Scavenge GC 和 Full GC

Scavenge GC (Mionr GC)
触发时机:新对象生成时,Eden空间满了
理论上Eden区大多数对象会在Scavenge GC 回收,复制算法的执行效率会很高,Scavenge GC时间比较短

Full GC
整个jvm进行整理,包括Young、old和perm
主要触发时机:old满了 perm满了 system.gc()
效率很低,尽量减少Full GC

配置jvm 参数如下:
-verbose:gc 打印垃圾收集的情况
-Xms20M  最小堆大小
-Xmx20M  最大堆大小
-Xmn10M  新生代大小
-XX:+PrintGCDetails  打印GC收集详细信息
-XX:SurvivorRatio=8  eden 与 from survivor to survivor 比例 8:1:1
public static void main(String[] args) {
        int size = 1024 * 1024;
        byte[] myAlloc1 = new byte[2*size];
        byte[] myAlloc2 = new byte[2*size];
        byte[] myAlloc3 = new byte[2*size];
        byte[] myAlloc4 = new byte[2*size];
        System.out.println("Test1.main");
}

打印结果:

 GC (Allocation Failure): Eden满了 分配失败进行GC垃圾回收

 PSYoungGen: 表述 使用parallel Scavenge 收集器

 ParOldGen:表示 parallel old 老年代收集器

 6874K->992K(9216K) : 6874K表示回收之前存活对象在新生代的空间的容量,992K表示回收后存活对象的容量

 9216K:表示新生代总空间容量大小

 6874K->3337K(19456K):6874K表示对象总的堆大小,3337K执行完回收之后 存活对象总的堆大的大小

 PSYoungGen:表示新生代

 ParOldGen :老年代

 6874-992 = 5882 //执行完GC后,新生代释放的空间的容量,新生代释放的空间 :1)被回收 2)晋升到老年代

 6874-3337=3537 //执行完GC后,总的堆空间释放的容量

 5882-3537=2345 //等于ParOldGen 老年代容量

[GC (Allocation Failure) [PSYoungGen: 6874K->992K(9216K)] 6874K->3337K(1945
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值