到底什么是GC roots
Roots or garbage collection roots are the objects that are always reachable. If an object is always reachable, then it is not eligible for garbage collection; roots therefore are always ineligible for collection. It is the initial set of objects from where reachability of all other objects on the heap are determined.
GCroots 总是可达的可以通过一张图概念上理解:
Person p = new Person();
p.car = new Car(RED);
p.car.engine = new Engine();
p.car.horn = new AnnoyingHorn();
Person [p]
|
Car (red)
/ \
Engine AnnoyingHorn
p.car = new Car(BLUE);
Person [p]
|
Car (blue) Car (red)
/ \
Engine AnnoyingHorn
P可以视为一个root:
关键在于是否总是可达
In most runtime however, the GC roots tend to be the operands on the stack (for they are currently in use by threads) and class (static) members of classe
在大多数运行时,GC根往往是堆栈上的操作数(因为线程当前正在使用它们)和classe的类(静态)成员