lixiaotao 2020-06-04
自动垃圾收集器是查看堆内存,识别正在使用那些对象以及那些对象未被删除以及删除未使用对象的过程。
使用中的对象或引用的对象意味着程序的某些部分仍然维护指向对象的指针。
程序的任何部分都不再引用未使用的对象或者引用的对象,因此可以回收未引用对象使用的内存。
像C这样的编程语言中,分配和释放内存是一个手动过程。
在Java中,解除分配内存的过程由垃圾收集器自动处理
程序计数器没办法解决循环应用问题
标记-清除(Mark-Sweep)算法:首先标识出所有要回收的对象,然后进行清除。
标记、清除过程效率有限,有内存碎片问题,不适合特别大的堆;收集算法基本基于标记-清除的思路进行改进
复制(Copying)算法:划分两块同等大小的区域,收集时将或者的对象复制到另一块区域。
拷贝过程中对象顺序防止,就可以避免内存碎片化。复制+预留内存,有一定的浪费。
标记-整理(Mark-Compact)算法:类似于标记-请出,但为了避免内存碎片化,它会在清理过程将对象移动,以确保移动后的对象占用连续的内存空间。
标记清除
回收完,剩余两个 8字节,但是要存大对象16字节,是没办法存的。这就是所谓的内存碎片比较验证。
启动一个线程 进行垃圾收集
具体的信息可参看《深入理解Java虚拟机JVM高级特性与最佳实践》