码迷,mamicode.com
首页 > 编程语言 > 详细

Java 垃圾回收

时间:2020-01-11 20:48:03      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:queue   引用   垃圾收集器   zed   活动   finalize   mamicode   级别   strong   

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

与C++的析构函数不同,析构函数调用确定,而它的是不确定的

将未被引用的对象放置在F-Queue队列

方法执行随时可能被终止

给予对象最后一次重生的机会

 

 

finalize示例

public class Finalization {

    public static Finalization finalization;

    @Override
    protected void finalize() throws Throwable {
        System.out.println("finalized");
        finalization = this;
    }

    public static void main(String[] args) throws InterruptedException {
        Finalization f = new Finalization();
        System.out.println("First print: " + f);
        f = null;
        System.gc();
        //休息一段时间,让上面的垃圾回收线程执行完成
        Thread.sleep(1000);
        System.out.println("Second print:" + f);
        System.out.println(f.finalization);

    }
}

  

  打印结果:

First print: jvm.gc.Finalization@2503dbd3
finalized
Second print:null
jvm.gc.Finalization@2503dbd3

 

2、Java中的强引用,软引用,弱引用,虚引用有什么用

强引用(Strong Reference)

 最普遍的引用: Object obj = new Object()

 抛出OutOfMemoryError终止程序也不会回收具有强引用的对象

 通过将对象设置为null来弱化引用,使其被回收

 

软引用(Soft Reference)

对象处在有用但非必须的状态

只有当内存空间不足时,GC会回收该引用的对象的内存

可以用来实现高速缓存

用法如下:

技术图片

 

 

 弱引用(Weak Reference)

非必须的对象,比软引用更弱一些

GC时会被回收

被回收的概率不大,因为GC线程优先级比较低

适用于引用偶尔被使用且不影响垃圾收集的对象

用法如下:

技术图片

 

 

虚引用(Phantom Reference) (顾名思义,弱引用形同虚设)

不会决定对象的生命周期

任何时候都可能被垃圾收集器回收

跟踪对象被垃圾收集器回收的活动,起到哨兵作用

必须和引用队列ReferenceQueue联合使用

用法如下

技术图片

 

 

总结:四种引用级别

强引用 > 弱引用 > 软引用 > 虚引用

技术图片

 

 

类的层次结构

技术图片

 

 

引用队列(ReferenceQueue)

无时间存储结构,存储逻辑依赖于内部节点之间的关系来表达

 

Java 垃圾回收

标签:queue   引用   垃圾收集器   zed   活动   finalize   mamicode   级别   strong   

原文地址:https://www.cnblogs.com/linlf03/p/12180897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!