码迷,mamicode.com
首页 > 编程语言 > 详细

jvm 垃圾回收概念和算法

时间:2018-01-29 20:14:41      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:频率   问题   inf   提升   工作   使用   基础上   效率   margin   

1、概念

  GC 中的垃圾,特指存在于内存中、不会再被使用的对象。垃圾回收有很多种算法,如引用计数法、复制算法、分代、分区的思想。

2、算法

  1、引用计数法:对象被其他所引用时计数器加 1,而当引用失效时则减 1,。但这种方式有非常严重的问题:无法处理循环引用的情况、还有就是每次进行加减操作比较浪费性能。

  2、标记清除法:就是分为标记和清除两个阶段进行处理内存中的对象,当然这种方式也有非常大的弊端,就是空间碎片问题,垃圾回收后的空间不是连续的,不连续的内存空间工作效率要低于连续的内存空间 ( java 中新生代的 from 和 to 空间就是使用的复制算法 ) 

技术分享图片

  3、复制算法:其核心思想就是将内存分为两块,每次只使用一块,在垃圾回收时,将正在使用的内存中的存留对象复制到未被使用的内存中去,之后清除之前使用内存中的对象,反复去交换两个内存的角色,完成垃圾回收。

  4、标记压缩法:标记压缩法在标记清除法基础上做了优化,把存活的对象压缩到内存一端,然后进行垃圾清理。(  java 中老年代就是使用的标记压缩法 )

  5、分代算法:根据对象的特点把内存份为 n 块,然后根据每个内存的特点使用不同的算法。对新生代和老年代来说,新生代回收频率高,但每次耗时短,而老年代回收频率低,但耗时相对较长,所以应当尽量减少老年代的 GC。

  6、分区算法:将整个内存分为 n 个独立空间,每个小空间都可以独立使用,这样细粒度的控制一次回收多少个小空间和哪些空间,而不是对整个空间进行 GC,从而提升性能,并减少 GC 的停顿时间。

3、为什么新生代和老年代使用不同的算法

  新生代里面的对象死得快、死的多,所以采用复制算法可以一次性大批量 GC

  老年代里面的对象死的少、死的慢,所以采用标记压缩法一次性小批量 GC

jvm 垃圾回收概念和算法

标签:频率   问题   inf   提升   工作   使用   基础上   效率   margin   

原文地址:https://www.cnblogs.com/fangwu/p/8378847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!