java的jvm虚拟机

一、关于GC的三种算法


1、复制算法(Copying):在JVM的堆内存当中,新生代使用的是复制算法。新生代的内存区域又分成Eden、From、To三个区域,这三个区域的内存占用比例是8:1:1,新创建(new)出来的对象存放在Eden区和From区中,当整两个区的内存到达一定的占用量后,会进行轻量级的垃圾回收(Minor GC),将存活下来的对象年龄+1,并将存活下来的对象复制到To区,此时Fron区和To区进行交换(区分From区和To区:谁空谁是To,并且From区和To区是不断交换的)。当一个对象的年龄达到15时,将此对象从新生代移动到老年代。优点:不产生内存碎片问题,能保持对象的完整性。缺点:因为要一致保持To区是空的,浪费了一定的内存空间。
2、标记清除/标记整理算法(Full GC 或者 Major GC):老年代一般是由标记清除或者是标记清除和整理的混合实现。
(1)标记清除算法:Mark-Sweep步骤一:标记:从根集合开始扫描,对存活的对象进行标记步骤二:清除:再次扫描整个内存空间,回收未被标记的对象,使用free-list记录可用区域。优点:两次扫描,耗时严重,会产生内存碎片。缺点:不需要占用额外空间。
(2)标记整理算法:Mark-Compact标记/整理算法唯一的缺点也是效率不高,不仅要标记所有存活对象,还要整理存活对象的引用地址。从效率上来说,标记/整理算法要低于复制算法
 

三种算法的一些小结内存效率:
复制算法>标记清除算法>标记整理算法。
内存整齐度:复制算法=标记整理算法>标记清理算法。
内存利用率:标记整理算法=复制算法>标记清理算法。

 

2优化收集方法的思路分代收集算法


原理:根据对象存活的周期的不同将内存划分为几块,然后再选择合适的收集算法。
一般是把java堆分成新生代和老年代,这样就可以根据各个年待的特点采用最适合的收集算法。在新生代中,每次垃圾收集都会有大量的对象死去,只有少量存活,所以选用复制算法。老年代因为对象存活率高,没有额外空间对他进行分配担保,所以一般采用标记整理或者标记清除算法进行回收。

目录

一、关于GC的三种算法

2优化收集方法的思路分代收集算法


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值