1 对象 对象在不同场合具有不同的意义。在GC领域中对象代表的是应用程序利用的数据集合,同时也是GC的基本单位,一般的对象都是由头(header)和域(fild)组成的。(基于我所使用的两种语言java和python都是这样的)
2 对象头(header)对象头一般存储着对象的元数据(大致可以分为类型信息和GC信息在Cpython中python所有的对象都是使用一个PyObj的指针去引用的。这个对象其实就是指向了python对象的头信息包括引用计数的数目和python对象的类型信息。类型信息主要是为了便于确定对象所占区域的大小和实现多态来使用的。有了引用计数和对象的大小这样就有了初步回收python对象的一个方向了。同样Java对象在java虚拟机规范中对象的header中同样存储了独享的GC信息,不过java是基于分代收集的所有存储了分代的信息和java类型信息)
3 对象域(fild)及是对象在程序是使用的数据
4活动对象和非活动对象。活动对象就是程序可是使用的对象(即可以被引用到的对象)。非活动对象就是不能再被程序所引用用的对象,及GC所要回收的垃圾。就像人一样,死了的不可能在活过来。因为我们的程序就是再想去引用他也是无法找到他的。
5 根。所有可以被引用的对象都被称为活动的对象。这其中有一部分对象是可以被程序直接引用到的对象,这些对象就是再GC中的根对象。GC就是通过这些对象去确定所有活着的对象的。一般的来说程序可以直接引用的对象是存在于全局变量,调用栈,和寄存器这些区域。