Java:References:修订间差异
第11行: | 第11行: | ||
==Phantom References== | ==Phantom References== | ||
<span class="article-label">PhantomReference</span>(虚引用)必须跟<span class="article-label">ReferenceQueue</span>一起使用。最弱,发生GC时会被回收。 | |||
<syntaxhighlight lang="java"> | |||
Gfg g = new Gfg(); | |||
ReferenceQueue<Gfg> refQueue = new ReferenceQueue<>(); | |||
PhantomReference<Gfg> phantomRef = new PhantomReference<>(g, refQueue); | |||
// 当g(强引用)不继续存在之后,对象就会被可以回收了 | |||
// 但在对象 | |||
g = null; | |||
//It always returns null. | |||
g = phantomRef.get(); | |||
</syntaxhighlight> | |||
[[Category:Programe]] | [[Category:Programe]] |
2021年4月29日 (四) 04:37的版本
Java引用类型
Strong References
默认的引用方式,即通过MyClass obj = new MyClass ();
这种方式赋值的对象,如果其存在active引用的话,是不会被回收的
Weak References
如果一个对象只能被弱引用访问(不存在强引用或者软引用的情况),那么下一次GC将被清理掉。
其主要的使用场景是实现canonicalizing mappings。即对于一个特定的value,map中只有一个instance。
Soft References
软引用的对象在JVM内存不足的时候会被回收掉。
Phantom References
PhantomReference(虚引用)必须跟ReferenceQueue一起使用。最弱,发生GC时会被回收。
Gfg g = new Gfg();
ReferenceQueue<Gfg> refQueue = new ReferenceQueue<>();
PhantomReference<Gfg> phantomRef = new PhantomReference<>(g, refQueue);
// 当g(强引用)不继续存在之后,对象就会被可以回收了
// 但在对象
g = null;
//It always returns null.
g = phantomRef.get();