jvm记录(5)

10.垃圾回收算法

1.标记清除算法(Mark Sweep)

1.标记:在GC Root的引用链去找,看堆对象是否被引用,引用保留,未被引用对象进行标记

2.清除:将该对象的起始结束的地址记录在空闲的地址列表中,下次分配新对象时,就可以在空闲的地址列表中查找。

优点:速度快

缺点:容易形成内存碎片

2.标记整理(Mark Compact)

1.标记:在GC Root的引用链去找,看堆对象是否被引用,引用保留,未被引用对象进行标记

2.整理:将垃圾对象删除,可用对象向前移动

优点:没有内存碎片

缺点:由于整理的过程涉及对象的移动,导致效率降低

 

3.复制算法(Copy)

1.标记:将内存区域划分为两块大小相同的区域,存在对象的称为from,另外一个区域始终空闲称为to,标记from中垃圾对象和可用对象。

2.复制:将from区域中存活的对象复制到to区域,复制过程中完成碎片的整理,from区域只剩下垃圾对象,清空from区域

3.交换:交换from和to区域的位置

优点:不会产生内存碎片

缺点:占用双倍的内存空间

11.分代回收

老年代:长时间存在的java对象

新生代:频繁更迭的Java对象

伊甸园:存放刚创建的Java对象,

第一次伊甸园空间紧张时:触发Minor GC:标记伊甸园区对象,有用的复制到幸存区To,同时复制过去的对象,经历过一次GC寿命加一,原来伊甸园的对象被回收。完成一次Minor GC后,交换两个幸存区的位置,这个时候幸存区To为空,From存放对象。

第二次伊甸园紧张时,Minor GC会标记伊甸园和幸存区From中的有用对象,复制到幸存区To中,寿命加一,接下来,清除伊甸园和幸存区To空间,交换两个幸存区的位置,此时幸存区To为空,From存放对象。

Minor GC会引发stop the world,暂停其他用户的线程,等垃圾回收借宿,用户线程才会恢复运行。

当幸存区From的对象寿命达到一个阈值,一般是15(4bit)时,会晋升到老年代中。

当新生代和老年代空间紧张时,会先触发Minor GC,之后才会触发Full GC,同时STW(stop the world)时间更长。之后空间任然不够,就会抛出OutOfMemoryError。

12.相关的VM参数

1.当放入内存的对象太大,伊甸园不发容纳,不会触发GC直接放到老年代中。

2.outofmemoryerror并不会导致整个进程的结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值