学习之路:JVM从入门到放弃——第三章:垃圾回收算法与垃圾回收器

垃圾回收算法与垃圾回收器

GC如何判断对象的存活

GC判断对象存活的方式:引用计数算法、可达性分析。
引用计数法:如果对象有一个引用的话,就给他进行一次+1,当GC发现这个对象引用次数是0的话,就把这个对象当成死了,之后将其回收。缺陷:如果A.instance = B 同时 B.instance = A,这种互相引用就会被GC判断成有用对象,便不会回收,但实际上AB均为无用对象。
可达性分析:如果对象有GC roots的引用,变不会回收。在Java中,可以作为GC Roots的对象包括:
1.方法区中类静态属性引用的对象;
2.方法区中常量引用的对象;
3.虚拟机栈(本地变量表)中引用的对象;
4.本地方法栈JNI(native方法)中引用的对象。
引用(Reference):指Reference中存储的数据代表的是另一块内存的起始地址。
各种引用 :引用又在后续的发展中延伸成四种引用
1.强引用(=)强引用就是一个等号
例:Object obj2 = obj1,这种就属于一个强引用。
2.软引用(SoftReference):尽可能保证不会被垃圾回收器回收,但是在内存不足的时候就会被回收。
例:

//实例化一个学号是007,姓名是张三的对象 ,new也是强引用
User user = new User(007,"张三");
//软引用
SoftReference<User> userSoft = new SoftReference<~>(user);
//把user置空,干掉强引用,确保该实例只有userSoft软引用
user = null;

3.弱引用(WeakReference):在每一次进行GC回收的时候就会被清除掉。ThreadLock、weakHashMap也属于弱引用。

4.虚引用(PhantomReference):幽灵引用,一般业务里用不着,也不知道什么时候就会被回收了。
在这里插入图片描述
如上图:obj1、2、3、4均和GC Roots有关,变不会被回收,而Object5.6.7就会被回收。
finalize:可以拯救对象不会被回收,但是虚拟机可能不会调用这个方法。慎用!

内存回收

GC:Garbage collection
内存回收分为两种:Minor GCFull GC
首先要知道什么时候会触发GC?
当虚拟机内存不足的时候就会触发。
Minor GC : 新生代不足的时候就会触发Minor GC。
Full GC :老年代不足的时候会触发Full GC,同时Full GC触发时,会回收新生代中的无用对象。

垃圾回收算法

在Java中,垃圾回收算法只有三种:复制算法标记-清除算法标记整理算法
复制算法:新生代(form to 两个交换区)中使用,直接把左边红色块的复制到右边蓝色块,于是左边又空出来了,右边有两个红色块。
在这里插入图片描述
优点:简单高效,不会出现内存碎片问题
缺点:内存利用与低,只有一半;存活对象较多的时候明显效率低。
标记-清除算法:如标题而言,首先去标记灰色区域,然后清除掉灰色区域。
在这里插入图片描述优点:利用率百分百。
缺点:标记和清除的效率(该效率是相比复制算法而言)都不高;会产生大量的不连续的内存碎片。
标记-整理算法 :如上图,在标记完灰色区域后,然后清除灰色区域,然后整理一次红色区域。
优点:利用率百分百;没有内存碎片
缺点:标记和清除的效率都不高。

垃圾回收器

垃圾回收器采用分代收集的方式回收垃圾。
新生代中垃圾回收器

收集器收集对象和算法收集器类型
Serial新生代,复制算法单线程
ParNew新生代,复制算法并行的多线程收集器
Parallel Scavenge新生代,复制算法并行的多线程收集器

老年代中垃圾回收器

收集器收集对象和算法收集器类型
Serial old老年代,标记整理算法单线程
Parallelold老年代,标记整理算法并行的多线程收集器
CMS老年代,标记清除算法并行的与并发收集器

跨越新生代和老年代的垃圾回收器

收集器收集对象和算法收集器类型
G1跨越新生代和老年代,标记整理和化整为零算法并行的与并发收集器

并行:垃圾收集的多线程同时进行。
并发:垃圾收集的多线程和应用的多线程同时进行。
关系图:
在这里插入图片描述
CMS垃圾回收器:并行收集和并发收集,该垃圾回收器会有四步骤:
1.初始标记(会暂停所有的线程)
2.并发标记(同时进行)
3.重新标记(会暂停所有的线程)
4.并发清除(同时进行)
在这里插入图片描述
缺点:CPU资源消耗较高,会产生较多的内存碎片,会产生浮动垃圾。
G1垃圾回收器(Garbadge First Collector):
改变了内存布局方式。
在这里插入图片描述
特点:
空间整合,不会产生内存碎片:跟算法有关,它采用的是标记整理算法。
可预测的停顿:可以尽可能的控制虚拟机停顿的时间。(该值可以设置)
G1 GC模式:
Young GC:可以勉强假想成Minor GC,对应Eden、Survivor区域进行回收
Mixed GC:可以勉强假想成Full GC,会对对象进行全局并发标记。
回收四步骤:
1.初始标记;
2.并发标记;
3.最终标记;
4.回收。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值