GC相关问题

  • Object的finalize()方法的作用是否与C++的析构函数作用相同?

1、与C++的析构函数不同,析构函数调用确定,而他的是不确定的
2、将未被引用的对象放置于F-Queue队列
3、方法执行随时可能会被终止(低优先级)
4、给予对象最后一次重生的机会

  • Object的finalize()方法的作用是什么?

finalize()的作用是为对象创造最后一次逃脱死亡的机会。当垃圾回收器宣告一个对象死亡时,至少要经过两次的标记过程,如果对象在进行可达性分析后,发现对象该没有和GC Roots相连接的引用链,就会被第一次标记,并且判断是否执行finalize()方法,如果对象覆盖finalize()方法且未被引用过,这个对象就会被放置在F-Queue队列中,并在稍后由一个虚拟机自动建立的低优先级的final线程去执行触发finalize()方法,触发该方法后不承诺等待其运行结束,即方法执行随时可能会被终止。

  • Java中的强引用、软引用、弱引用、虚引用有什么用?

强引用(Strong Reference):
最普遍的引用:Object obj = new Object();
抛出OutOfMemoryError终止程序也不会回收具有强引用的对象
通过将对象设置为null来弱化引用,使其被回收

软引用(soft Reference )
1、对象处在有用但非必须的状态
2、只有当内存空间不足时,GC会回收改引用的对象的内存。
3、可以用来实现高速缓存
在这里插入图片描述
弱引用(weak Reference )
1、非必需的对象,比软引用更弱一些
2、GC时会被回
3、被回收的概率也不大,应为GC线程优先级比较低
4、适用于引用偶尔被使用且不影响垃圾收集的对象
在这里插入图片描述
虚引用(Phantom Reference)
1、不会决定对象的生命周期
2、任何时候都有可能被垃圾收集器回收
3、跟踪对象被垃圾收集器回收的活动,起哨兵作用
4、必须和引用队列ReferenceQueue联合使用
在这里插入图片描述

在这里插入图片描述

  • 引用队列(Reference Queue)

作用:GC完成之后,Reference Queue被用来存储除强引用之外的与之关联的引用对象。

1、无实际存储结构,存储逻辑依赖于内部节点之间的关系来表达
2、存储关联的且被GC的软应用、弱引用以及虚引用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值