JVM垃圾收集算法之清除算法
2019-08-16 09:37:35来源:博客园 阅读 ()
JVM垃圾收集算法之清除算法
最近看了一些大佬的博文,文中提到说:学习知识不能一味的死学滥学,在学之前要明白为什么要学这个知识,在实际的应用中怎么运用这个知识。我觉得说的很对,很多时候我学习确实是了解了这是什么原理,但是要说到实际中怎么应用确实比较难总结。但以后我也会尽量总结这个知识点有什么用。
看前总结:为什么要了解垃圾回收中清除算法的具体实现,那是因为在jvm有很多种不同的垃圾收集器,而每个垃圾收集器中运用的清除算法是不一定相同的,为此我们在具体的应用中配置jvm的参数时,要根据业务的需求来对垃圾收集器进行配置,而清除算法是考虑应用哪一种垃圾收集器的要点之一。我们要根据业务的需求选择适合的垃圾收集器。
- 在上次的博文中,我记录了常用的标记算法,今天刚好想总结一下垃圾的清除算法。注意:回收算法指的是jvm的回收器用的是什么方法回收,并不指具体的回收器。
- 标记——清除算法
定义:标记清除算法顾名思义,是指在虚拟机执行垃圾回收的过程中,先采用标记算法确定可回收对象,然后垃圾收集器根据标识清除相应的内容,给堆内存腾出相应的空间。
缺点:容易产生大量的内存碎片,可能无法满足大对象的内存分配,一旦导致无法分配对象,那就会导致jvm启动gc,一旦启动gc,我们的应用程序就会暂停,这就导致应用的响应速度变慢。
操作如图所示:
- 复制算法
定义:把内存空间分成两个维度,每次只使用其中一个空间。当开始gc的时,垃圾回收器会把相应的垃圾清除,剩下的存活对象按照顺序排列完成清理。
缺点:复制算法把有用的空间压缩了一半,因为每次只能使用一半的空间用作分配,剩下的用作gc后的分配。
操作如图所示:
- 标记——压缩算法
定义:标记压缩算法是标记清除的改进版本,当垃圾收集器把垃圾清除后,下一步还会对内存碎片进行整理,把存活对象统一的整理到一边。
缺点:虽然算法免去了内存碎片的出现和节省了空间,但这种算法需要频繁的移动对象,所以会造成gc效率的降低。
操作如图所示:
- 总结
标记—清除算法 | 复制算法 | 标记—压缩算法 | |
速度 | 中等 | 最快 | 最慢 |
空间开销 | 少(堆积碎片) | 通常需要两倍的空间 | 少 |
移动对象 | 否 | 是 | 是 |
由表格可知:
- 标记——清除算法由于速度效率不高且会产生内存碎片,在实际中也很少被垃圾收集器使用。
- 而复制算法由于它的效率较高,在经常发生GC的新生代区应用是个不错的选择,因为在新生代的存活对象一般不多,对于空间的需求不高,而且还可以通过对象提升把对象放入老年代。
- 而标记压缩算法则可以应用在GC不那么频繁的老年代,虽然效率较低,但由于GC的次数没有那么频繁、同时由于可以进行内存碎片的整理,也有利于老年代的大对象的存放。
- 没有绝对优秀的算法,只有最适合的算法,所以具体使用需要根据业务的需求而定。
原文链接:https://www.cnblogs.com/hill1126/p/11121295.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- JVM常见面试题解析 2020-06-11
- 【JVM故事】了解JVM的结构,好在面试时吹牛 2020-06-06
- 京东面试,被面试官按头问JVM,绝望 2020-06-05
- JVM系列之.JVM内存模型如何正确运用操作?本文详解 2020-06-04
- JDK8的JVM内存模型小结 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash