JVM垃圾回收相关总结

1、Full GC 、 Major GC 、Minor GC 之间区别

  • Minor GC: 从新生代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。
  • Major GC: 清理 Tenured 区,用于回收老年代,出现 Major GC 通常会出现至少一次 Minor GC。
  • Full GC: Full GC 是针对整个新生代、老年代、元空间(metaspace,java8 以上版本取代 perm gen)的全局范围的 GC。

2、什么时候触发 Full GC

  • 调用 System.gc 时,系统建议执行 Full GC,但是不必然执行。
  • 老年代空间不足。
  • 方法区空间不足。
  • 通过 Minor GC 后进入老年代的平均大小大于老年代的可用内存。
  • 由 Eden 区、survivor space1(From Space)区向 survivor space2(To Space)区复制时,对象大小大于 To Space 可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小。

3、出现栈溢出的原因

  • 可能方法中创建了一个很大的对象,如 List,Array。
  • 可能产生了循环调用、死循环。
  • 可能引用了较大的全局变量

4、强引用、软引用、弱引用、虚引用以及他们之间和 gc 的关系

粗俗的说就是:不同的引用对应垃圾回收的力度不同。

  • 强引用:new 出的对象之类的引用,只要强引用还在,永远不会回收。
  • 软引用:引用但非必须的对象,内存溢出异常之前,回收。
  • 弱引用:非必须的对象,对象能生存到下一次垃圾收集发生之前。
  • 虚引用:对生存时间无影响,在垃圾回收时得到通知。

##对于上述各种引用可参考这篇知乎加深理解:https://www.zhihu.com/question/37401125

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值