Java通過可達性分析來判斷對象是否存活。
基本思想是通過一系列稱為“GC roots”的對象作為起始點,可以作為根節點的是:
1、虛擬機棧(棧幀中的本地變量表)中引用的對象
2、本地方法棧中JNI(即一般說的Native方法)引用的對象
3、方法區中類靜態屬性引用的對象
4、方法區中常量引用的對象
作為GC Roots的節點主要在全局性的引用(例如常量或類靜態屬性)與執行上下文(例如棧幀中的本地變量)中。
虛擬機、本地方法棧這都是局部變量,某個方法執行完,某些局部使用的對象可以被回收。