虚拟机内的垃圾收集算法
2018-08-21 05:33:12来源:博客园 阅读 ()
我这只是介绍虚拟机内的垃圾收集算法大致介绍,因为每一种垃圾收集算法都涉及到大量的程序代码细节,而且各个平台的虚拟机操作内存的方法又各不一样,因此我这里就不对算法的实现做描述了;
1标记-清除算法
标记清除算法是最基础的算法,如名一样,分为 “标记 ”和 “清除”两个阶段,首先是标记哪些对象是需要清除的,哪些对象是需要清除的也就是不可能被任何途径使用的对象也称为“死对象”,标记完之后再统一回收被标记的所有对象,这种算法存在两个问题:一是效率问题,标记和清除两个过程的效率都不高,二是空间问题,被清除的对象会留下大量不连续的空间碎片,空间碎片太多可能会导致后续程序运行过程中需要分配较大内存的时候,找不到足够大连续的内存而触发再一次的垃圾收集动作;
2复制算法
标记清除算法效率不高,为了解决效率问题,复制算法出现了,它将可用内存分为大小相等的两块,虽然有两块但是它就只用一块,当这一块内存用完了,它再将还存活的对象的对象复制到另外一块上,然后再将用过的那一半内存空间一次情掉,这样每次都是对整个半区清理,内存分配的时候也就不用考虑空间碎片的问题;
3标记-整理算法
复制算法不知道大家有没有注意到,当一半内存存活数量很高的时候会做大量的复制操作,这样效率还是不够高,之后又有人提出另外的一种算法,标记整理算法,和标记清除算法一样,只是标记整理算法有后续的操作,就是对可回收对象进行整理,还存活的对象一边移,然后清理边界以外的内存
4分代收集算法
当前商业虚拟机的垃圾收集算法都采用的是分代收集算法,这种算法并没有什么心的思路,只是根据对象存活的周期不同将内存划分为几块,一般是把java堆分为新生代和老生代,这样就可以根据各个年代的特点对才用最适当的算法,在新生代中每次垃圾收集时都会有大量的对象死去只有少量存活就才用复制算法,而老年代中,因为对象存货率高,没有额外的空间对它们进行分配担保,就必须才用标记清理或者标记整理算法来进行回收;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Java跨平台原理(字节码文件、虚拟机) 以及Java安全性 2020-06-07
- 无责任书评:每个Java程序员都应该深入理解Java虚拟机 2020-05-28
- 图解 Java 垃圾回收机制,写得非常好! 2020-05-22
- 3-JVM垃圾回收算法和垃圾收集器 2020-05-12
- Java架构之路-(面试篇)JVM虚拟机面试大全 2020-05-08
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