Java 语言的垃圾收集机制

xiaoxiao2021-02-27  341

Garbage Collection 目的: 去清除不在使用的对象所占用的内存空间

采用跟踪收集器 去递归的遍历一组对象,确定可到达的对象,进行标记。

删除的时候,进行堆栈扫描,删除未标记的对象。

另外需要注意的是:

 (1).对象不一定会被回收。  (2).垃圾回收不是析构函数。  (3).垃圾回收只与内存有关。  (4).垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的

另外需要注意的是,在清除的时候内存会被分为好多小的片段,GC机制中海油压缩收集器和复制收集器,会把标记对象

放到新堆栈中进行压缩,较少内存的碎片化。

再深入一些关于新生代和老生代的问题,,,目前没看明白以后再说

两个最基本的java回收算法:复制算法和标记清理算法 复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法 标记清理:一块区域,标记要回收的对象,然后回收,一定会出现碎片,那么引出 标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象 两个概念:新生代和年老代 新生代:初始对象,生命周期短的 永久代:长时间存在的对象 整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。 P.S:Serial New收集器是针对新生代的收集器,采用的是复制算法 Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理 Parallel Scavenge(并行)收集器,针对新生代,采用复制收集算法 Serial Old(串行)收集器,新生代采用复制,老年代采用标记整理 Parallel Old(并行)收集器,针对老年代,标记整理 CMS收集器,基于标记清理 G1收集器:整体上是基于标记 整理 ,局部采用复制

转载请注明原文地址: https://www.6miu.com/read-1305.html

最新回复(0)