JVM的垃圾回收机制,是否回收一个对象的标准在于:是否还有应用变量引用该对象?只要有引用变量引用该对象垃圾回收机制就不会回收它。
即:当java对象被创建出来以后,垃圾回收机制会实时地监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等。当垃圾回收机实时地检测到某个对象不再被引用变量引用时,立即回答后机制就会回收它所占有的空间。
基本上,可以把JVM内存中对象的引用理解成一种有向图,把引用变量、对象都当做有向图的顶点,将引用关系当成图的有向边,有向边总是从引用端指向被引用的Java对象。因为Java对象都是一条一条线程创建出来的,因此可以把线程对象当成有向图的起始顶点。
对于单线程程序而言,整个程序只有一条main线程,那么该图就是以main进程为顶点的有向图。在这个有向图中,main顶点可达的对象都处于可达状态,垃圾回收机制不会回收它们;如果某个对象在这个有向图中处于不可达状态,那么就可以认为这个对象不再被引用,接下来垃圾回收机制就会回收它了。 |