我是靠谱客的博主 爱撒娇钢笔,最近开发中收集的这篇文章主要介绍【java.lang.ref】当WeakReference的referent重写了finalize方法时会发生什么问题测试代码分析结论,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
问题
question:当WeakReference的referent重写了finalize方法时会发生什么?
测试代码
JVM中是存在这样的情况的:一个Java对象,重写了finalize方法,在使用的过程中又被SoftReference或WeakReference或PhantomReference封装,这时候JVM是怎么处理该referent的?
软引用受LRU策略的影响,不太好探究。直接使用虚引用在JVM中的处理流程和弱引用一致,但还需要提供一个关系不大的ReferenceQueue,所以选择弱引用来探究这个问题,是更合适的。
用代码来描述这个问题:
public class ThisEscapeAndWeakRef {
private static ThisEscapeAndWeakRef escape = null;
@Override
// finalize逃逸
protected void finalize() throws Throwable {
ThisEscapeAndWeakRef.escape = this;
System.out.println("finalize method running");
}
// 用于测试finalize逃逸是否成功,如果成功escape != null,则可以调用该方法
// 否则报空指针异常
public void isAlive(String step) {
System.out.println(step + ": " + this
最后
以上就是爱撒娇钢笔为你收集整理的【java.lang.ref】当WeakReference的referent重写了finalize方法时会发生什么问题测试代码分析结论的全部内容,希望文章能够帮你解决【java.lang.ref】当WeakReference的referent重写了finalize方法时会发生什么问题测试代码分析结论所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复