cn.hutool.core.util.ReferenceUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hutool-all Show documentation
Show all versions of hutool-all Show documentation
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
package cn.hutool.core.util;
import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
/**
* 引用工具类,主要针对{@link Reference} 工具化封装
* 主要封装包括:
*
* 1. {@link SoftReference} 软引用,在GC报告内存不足时会被GC回收
* 2. {@link WeakReference} 弱引用,在GC时发现弱引用会回收其对象
* 3. {@link PhantomReference} 虚引用,在GC时发现虚引用对象,会将{@link PhantomReference}插入{@link ReferenceQueue}。 此时对象未被真正回收,要等到{@link ReferenceQueue}被真正处理后才会被回收。
*
*
* @author looly
* @since 3.1.2
*/
public class ReferenceUtil {
/**
* 获得引用
*
* @param 被引用对象类型
* @param type 引用类型枚举
* @param referent 被引用对象
* @return {@link Reference}
*/
public static Reference create(ReferenceType type, T referent) {
return create(type, referent, null);
}
/**
* 获得引用
*
* @param 被引用对象类型
* @param type 引用类型枚举
* @param referent 被引用对象
* @param queue 引用队列
* @return {@link Reference}
*/
public static Reference create(ReferenceType type, T referent, ReferenceQueue queue) {
switch (type) {
case SOFT:
return new SoftReference<>(referent, queue);
case WEAK:
return new WeakReference<>(referent, queue);
case PHANTOM:
return new PhantomReference<>(referent, queue);
default:
return null;
}
}
/**
* 引用类型
*
* @author looly
*
*/
public enum ReferenceType {
/** 软引用,在GC报告内存不足时会被GC回收 */
SOFT,
/** 弱引用,在GC时发现弱引用会回收其对象 */
WEAK,
/**
* 虚引用,在GC时发现虚引用对象,会将{@link PhantomReference}插入{@link ReferenceQueue}。
* 此时对象未被真正回收,要等到{@link ReferenceQueue}被真正处理后才会被回收。
*/
PHANTOM
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy