剑指Java面试-Offer直通车--GC

前言:以下相关内容多为图片,参考链接、附上少量文字解释,以便整理脉络,以作复习巩固之用。若需详细了解,请查阅相关资料或者观看相关课程。如有错误,敬请指出,谢谢。

参考链接:《剑指Java面试-Offer直通车》–Java底层知识GC

一、垃圾回收之标记算法

对象被判定为垃圾的标准:
没有被任何对象引用的情况下,对于系统而言就是垃圾,占据的内存就要被释放,此对象也会被销毁。

判定对象不被引用的方法:
1)引用计数算法;
2)可达性分析算法

引用计数算法

通过判断对象的引用数量来决定对象是否可以被回收。
在这里插入图片描述

可达性分析算法

通过判断对象的引用链是否可达来决定对象是否可以被回收。
注:GC Root
在这里插入图片描述
在这里插入图片描述

二、回收算法

1、标记-清除算法(Mark and Sweep)

从根集合进行扫描
在这里插入图片描述

2、复制算法(copying)

分为对象面和空闲面
在这里插入图片描述

3、标记-整理算法(Compacting)

标记、整理(移动,就不需要考虑分一半)、回收
在这里插入图片描述

4、分代收集算法(Generational Collector)

注:
参考链接:JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
在这里插入图片描述
To Survivor 和 From Survivor的标记会互换,始终保证一个survivor是空的

1、Eden Space字面意思是伊甸园,对象被创建的时候首先放到这个区域,进行垃圾回收后,不能

2、被回收的对象被放入到空的survivor区域。

3、Survivor Space幸存者区,用于保存在eden space内存区域中经过垃圾回收后没有被回收的对象。

4、Survivor有两个,分别为To Survivor、 From Survivor,这个两个区域的空间大小是一样的。

5、执行垃圾回收的时候Eden区域不能被回收的对象被放入到空的survivor
(也就是To Survivor,同时Eden区域的内存会在垃圾回收的过程中全部释放),
另一个survivor(即From Survivor)里不能被回收的对象也会被放入这个survivor(即To Survivor),
然后To Survivor 和 From Survivor的标记会互换,始终保证一个survivor是空的。

GC分类
1)Minor GC:发生在年轻代中的垃圾收集动作,采用的复制算法
2)Full GC:和老年代相关
在这里插入图片描述在这里插入图片描述在这里插入图片描述

分代收集算法关键词

在这里插入图片描述

三、常见的垃圾收集器

参考链接:Java虚拟机垃圾回收(三) 7种垃圾收集器

JVM的运行模式:

Server和Client
注:
1、理解就是高配版和低配版
2、java -version可以查看当前虚拟机使用的哪种运行模式

垃圾收集器之间的联系

垃圾收集器和JVM实现紧密相关的,虚拟机所处的区域,说明它是属于新生代的收集器还是老年代的收集器,如果两个收集器之间有连线,就说明它们可以搭配使用
在这里插入图片描述

四、常见面试题

finalize()

在这里插入图片描述

ReferenceQueue引用队列

注:这个需要查自恋
在这里插入图片描述

注:
1、Queue类似于一个链表的结构,这里的节点其实就是Reference本身。

2、链表的容器,其自己只存储当前的head节点,而后面的节点由每个Reference节点自己通过next来保存即可。

3、上面三个引用都可以保存到引用队列里面,强引用不可以

4、如果在创建一个引用对象的时候,指定了ReferenceQueue,
那么当引用对象指向的对象达到合适的状态的时候,GC会把引用对象本身添加到这个队列里面,方便我们处理它

强引用作用 Strong Reference

强引用(Strong Reference),最普遍的引用,

1、例如Object obj = new Object();这里new一个对象实例来,这里面的obj就是一个强引用。

2、如果一个对象具有强引用,当内存空间不足的时候,
Java虚拟机宁可抛出OutOfMemoryError终止应用程序,也不会回收具有强引用的对象。

3、通过将对象设置为null来弱化引用,使其被回收。
	注:设置为null相当于去掉与堆中对象的联系或连接
	
	如果我们不使用这个对象了,需要通过将对象的引用设置为null方法来弱化引用,使其被回收,
	即将刚才的obj设置为null,或者等待它超过对象的生命周期范围,
	这个时候GC就认为该对象不存在引用了,就可以回收这个对象了。具体什么时候收集,取决于系统。

软引用(Soft Reference),表示一个对象处在有用但非必须的状态

软引用 softReference 类

弱引用(Weak Reference),用来描述非必须的对象,类似软引用,强度比软引用更弱一些

GC在扫描的过程中,一旦发现有被弱引用关联的对象,就会将它回收了
弱引用 WeakReference类

虚引用(Phantom Reference),顾名思义就是形同虚设,与其他几种引用不同,虚引用不会决定对象的生命周期

虚引用 PhantomReference类
如果一个对象仅持有虚引用,那么它就和没有任何引用一样。任何时候都可能被垃圾收集器回收
在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值