我是靠谱客的博主 爱撒娇钢笔,最近开发中收集的这篇文章主要介绍【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方法时会发生什么问题测试代码分析结论所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部