对象/头/域
1.头:主要包含对象的大小,对象的种类(可以类比header)
2.域:我们把对象使用者在对象中可以访问的部分称为域。
域中的数据类型分为大致以下2种,指针和非指针。
通过GC,对象会被毁坏或保留,这时候起关键的作用的是指针,因为GC是根据对象的指针去搜寻其他的对象的,GC对指针
不进行操作。默认情况下,指针指向指针头部分
mutator(他的实体就是应用程序)
意思改变某物,gc改变对象之间的引用关系。实际是生成指针和更新指针。
堆
指的是用于冬天存放对象的内存空间,当mutator申请存放对象时,所需的内存空间就会从这个堆被分配给muttator。
等到堆被分配对象占满后,GC就会启动,从而分配可用空间,如果不够分配足够用可用空间,一般情况下就要扩展堆。
活动对象与非活动对象
我们将分配到内存空间中的对象那些通过mutator引用的对象称为活动对象,死了的对象时不可能活过来的。
分配
内存空间分配对象,当mutator需要对象时,就会分配器(allocator)申请一个大小合适的空间。分配器则在堆中可用空间
寻找满足要求的空间。
1.销毁至今为止所有的计算结果,输出错误信息
2.扩大堆,分配可用空间
分块
在gc的世界里指的是利用对象而事先准备出来的空间。初始状态下,堆被一个大的分块所占据,然后根据mutator的要求,
根
在gc的世界中,根是指对象指针起点部分。我们也可以通过mutator直接调用栈和寄存器
垃圾回收评价标准
吞吐量:单位时间内的处理能力
最大暂停时间:因为执行gc而暂停mutator的运行时间。
堆最大使用率
访问局部性