以下是关于Java引用的教程内容整理,涵盖基本概念、类型及使用方法:
Java引用的基本概念
Java中的引用是指向对象的内存地址的变量,不同于C/C++的指针,Java引用由JVM管理,无法直接操作内存。所有类、接口、数组类型的实例均通过引用访问。
引用类型分类
-
强引用(Strong Reference)
最常见的引用类型,只要强引用存在,对象不会被垃圾回收。Object obj = new Object(); // 强引用 -
软引用(Soft Reference)
内存不足时会被回收,适合缓存场景。SoftReference<Object> softRef = new SoftReference<>(new Object()); -
弱引用(Weak Reference)
无论内存是否充足,垃圾回收时均可能被回收。WeakReference<Object> weakRef = new WeakReference<>(new Object()); -
虚引用(Phantom Reference)
无法通过虚引用获取对象,主要用于跟踪对象被回收的状态。PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), new ReferenceQueue<>());
引用队列(ReferenceQueue)
与软引用、弱引用、虚引用配合使用,用于监控引用对象被回收的状态。
ReferenceQueue<Object> queue = new ReferenceQueue<>();
WeakReference<Object> ref = new WeakReference<>(new Object(), queue);
使用场景
- 强引用:常规对象创建。
- 软引用:实现内存敏感的缓存(如图片缓存)。
- 弱引用:避免内存泄漏(如WeakHashMap)。
- 虚引用:资源清理跟踪(如NIO的直接缓冲区管理)。
示例代码:弱引用与引用队列
ReferenceQueue<String> queue = new ReferenceQueue<>();
WeakReference<String> weakRef = new WeakReference<>("Hello", queue);
System.gc(); // 触发GC
Reference<? extends String> ref = queue.remove(); // 获取被回收的引用
注意事项
- 避免滥用软引用/弱引用,可能影响性能。
- 虚引用必须与引用队列联合使用。
- 垃圾回收时机由JVM决定,无法精确控制。
如果需要更深入的内容(如引用与垃圾回收机制的关系),可进一步查阅JVM规范或相关书籍。
250

被折叠的 条评论
为什么被折叠?



