Java引用的种类
当程序员通过new关键字创建对象,即视为为Java对象申请内存空间。JVM会在堆内存中为每个对象分配空间;当一个对象失去引用的时候,JVM垃圾回收机制会自动清除他们,并回收他们所占用的内存空间。
Java内存管理包括内存分配(创建Java对象的时候)和内存回收(回收 Java对象的时候)两个方面。
JVM垃圾回收机制是否回收一个对象的标准:是否有引用变量引用该对象?
class Nod{
Nod next;
String name;
public Nod(String name) {
this.name = name;
}
}
public class NodeTest {
public static void main(String[] args) {
Nod n1 = new Nod("第一个节点");
Nod n2 = new Nod("第二个节点");
Nod n3 = new Nod("第三个节点");
n1.next = n2;
n2 = null;
n3 = n2;
}
}
JVM的垃圾回收机制采用有向图的方式来管理内存中的对象。程序的有向图:
有向图现实只有“节点3”处于不可达状态,因此JVM的垃圾回收机制将会回收它。
对象在堆内存中对应的有向图的状态:可达状态、可恢复状态、不可达状态
Java语言对对象的引用方式:强引用、软引用、弱引用、虚引用
强引用:<