0
点赞
收藏
分享

微信扫一扫

Java虚拟机垃圾回收

seuleyang 2022-01-06 阅读 77

我的理解简述:youngGC、OldGC、FullGC

YoungGC 就是年轻代的gc ,OldGC就是老年代的gc ,FullGC是针对年轻代、老年代、永久代进行的整体的gc 。

 MinorGC也可以称之为YoungGC,MajorGC也可以称之为OldGC,

但是为什么有人把fullGC和oldGC挂等号呢,这是在jdk1.7之前永久代还没取消,oldGC就会把老年代和永久代(方法区)一起GC,而OldGC执行的时候,一般都会带上一次YoungGC

发生YoungGC之前往往会先检查一下老年代的空间,如果说明本次YoungGC后可能升入老年代对象的大小,可能超过了老年代当前可用内存空间,此时必须先触发一次OldGC给老年代腾出更多的空间,然后再执行YoungGC

所以,一般OldGC 很可能就是在 YoungGC 之前触发,所以自然OldGC一般都会跟一次YoungGC连带关联在一起了。 那他触发的实际上就是FullGC,因为我们知道 FullGC会包含YoungGC、OldGC和永久代的GC 也就是说触发FullGC的时候,可能就会去回收年轻代、老年代和永久代三个区域的垃圾对象。

但是我们必须清楚:这三种的关系,GCyoungGC、OldGC、FullGC,而且在jdk1.8后取消了永久代 youngGC + OldGc 不等于 FullGC

R大:

  • Partial GC:并不收集整个GC堆的模式
    • Young GC:只收集young gen的GC
    • Old GC:只收集old gen的GC。只有CMS的concurrent collection是这个模式
    • Mixed GC:收集整个young gen以及部分old gen的GC。只有G1有这个模式
  • Full GC:收集整个堆,包括young gen、old gen、perm gen(如果存在的话)等所有部分的模式。

Major GC通常是跟full GC是等价的,收集整个GC堆。但因为HotSpot VM发展了这么多年,外界对各种名词的解读已经完全混乱了,当有人说“major GC”的时候一定要问清楚他想要指的是上面的full GC还是old GC。

最简单的分代式GC策略,按HotSpot VM的serial GC的实现来看,触发条件是:

  • young GC:当young gen中的eden区分配满的时候触发。注意young GC中有部分存活对象会晋升到old gen,所以young GC后old gen的占用量通常会有所升高。
  • full GC:当准备要触发一次young GC时,如果发现统计数据说之前young GC的平均晋升大小比目前old gen剩余的空间大,则不会触发young GC而是转为触发full GC(因为HotSpot VM的GC里,除了CMS的concurrent collection之外,其它能收集old gen的GC都会同时收集整个GC堆,包括young gen,所以不需要事先触发一次单独的young GC);或者,如果有perm gen的话,要在perm gen分配空间但已经没有足够空间时,也要触发一次full GC;或者System.gc()、heap dump带GC,默认也是触发full GC。

2.判定对象是否存活算法:

(1).引用计数算法

 给对象添加一个引用计数器,每当有一个地方引用它时,计数器就加1,当引用失效时计数器救减1,任何时刻计数器为0的对象就是不可能再被使用的,这个算法虽然实现简单,判定效率也很高,但是它很难解决对象之间的互相引用的问题。

(2).可达性分析算法

通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连(从GC Roots到这个对象不可达)时,则证明这个对象是不可用的。

在Java语言中,可作为GC Roots的对象包括下面几种:

虚拟机栈(栈帧中的本地变量表)中的引用对象

方法区中类静态变量引用的对象

方法区中常量引用的对象

本地方法栈中JNI(即一般说的Natice方法)引用的对象

(3)四种引用:

强引用:直接赋值,只要强引用在就回收不了被引用的对象

软引用:   通过softReference实现软引用,当内存不足时,被软引用的对象就被回收

弱引用:   通过WeakReferrence实现弱引用,只要进行垃圾回收被弱引用的对象就会被回收

虚引用:   PhantomReference 类实现虚引用,虚引用完全不影响对象的生命周期,它的作用就是在对象被回收的时候收到一个系统通知。

举报

相关推荐

0 条评论