强引用是Java中最常见且最顽固的引用类型,只要对象被强引用指向,垃圾回收器绝不会回收它,即使内存不足抛出OutOfMemoryError;其特点是仅当强引用被显式断开(如置为null)且无其他强引用时,对象才可能被回收。
强引用是 Java 中最常见、最“强硬”的引用类型,只要一个对象还被强引用变
量指向,它就绝对不会被垃圾回收器回收,哪怕内存已经紧张到要抛 OutOfMemoryError 了。
你平时写的绝大多数引用都是强引用:
String str = new String("hello"); —— str 就是一个强引用,指向堆中那个字符串对象List list = new ArrayList(); —— list 强引用着这个 ArrayList 实例只要这些变量还在作用域内(比如没出方法、没被置为 null、没被重新赋值),JVM 就认定这个对象“正在被使用”,绝不会清理它。
垃圾回收器只对“不可达”对象下手。所谓不可达,就是从 GC Roots(如栈帧中的局部变量、静态变量、本地方法栈引用等)出发,**没有任何一条强引用链能到达该对象**。
str = null;),且再无其他强引用,那它才可能在下一次 GC 中被回收它是理解 Java 内存管理的起点:
基本上就这些。强引用不复杂,但容易忽略它的“顽固性”——它不是“建议保留”,而是“必须保留”,直到你亲手切断它。