首页 并发工具 - Reference
文章
取消

并发工具 - Reference

一.Reference机制

一. Reference类图

类型实现说明
强引用 虚拟机内部实现,有引用就不会被gc
软引用softreference内存不足时gc
弱引用weakreference下一次gc的时候回收
虚引用phantomreference不影响引用的对象的生命周期。
 finalreferenceObject 的finalize()的实现机制

1.1 FinalReference的Finalizer机制

Finalizer只关联Object的finalize()方法。Finalizer实际就是一个reference, 每一类reference都有一个queue, 当reference被引用的对象被回收的时候,就去处理这个queue中的对象。Finalizer中有一个f-queue,当一个对象没有引用了,会放进这个fqueue里面,然后会执行里面的finilizer方法。这个方法在对象被gc回收前可以进行释放资源, 或者让自己免于被gc的命运。

1.2 PhantomReference的Cleaner机制

PhantomReference不影响对象的gc过程。当reference引用的对象被gc回收的时候, 会将这个对象的引用(Cleaner)放进pending链表里面,然后Reference-Handler会处理这个链表里面的cleaner。执行Cleaner中的clean方法进行处理。

Cleaner机制和Finializare机制比较

finializare机制在对象中实现耦合,在对象回收前,给对象一次机会逃逸gc,但不保证执行。

cleaner机制实现与对象解耦,在对象回收后,执行与对象关联的一个runnable。

本文由作者按照 CC BY 4.0 进行授权

Maven入门

并发工具 - Unsafe