基本的垃圾回收算法总结
来源:互联网 发布:sql server哪个版本好 编辑:程序博客网 时间:2024/04/20 04:38
Java虚拟机中的垃圾回收机制的是虚拟机的灵魂所在。
下面介绍下虚拟机中的主要回收算法。
引用计数法
实现:
对于实例化的一个对象O。只要有任何一个其他的对象引用O。O的引用计数器就加一。当引用失效的情况下,引用计数器减一。
优点:
实现简单
缺点:
(1)当出现循环引用的话无法处理。(例如A引用O,O也引用A)
(2)每次引用计数器的加一减一操作会对系统的性能有一定的影响(实际项
目中当大量的对象被创建,并且互相引用时,引用计数器的加减操作会变得不能忽视)
标记清除法
实现:
标记清除算法分为标记和清除两个阶段。
标记阶段的时候通过根节点搜索可达对象进行标记。
清除阶段清除所有不可达对象。
(根节点是指在程序中可以直接访问的对象,一般为栈中的本地变量和静态变量)
缺点:
回收后的空间是不连续的,不连续的空间工作效率要低于连续的空间。
标记压缩法
实现:
标记清除算法的改进,在标记后将所有的存活对象压缩到内存的一段,然后将边界外的空间进行清理。
优点:
相比较于标记清除算法, 回收后的内存空间连续。
相比较于复制算法,不需两块相同的空间,压缩实际的使用空间大小。
适用性:
适用于老年代。
老年代存活对象占大多数,垃圾对象占少数。
复制算法
实现:
将原有的内存空间划分为相同大小的空间。
1.每次只使用其中一块。
2.在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存中。之后清除正在使用的内存中所有的对象。
3.交换两个内存的角色。
优点:
确保了回收后的内存空间没有碎片
缺点:
实际可用空间只有系统最大内存的一半。压缩的可用内存空间。
适用性:
适用于新生代的垃圾回收。
新生代存活对象少,垃圾对象多。复制存活对象的成本低。
分代算法
实现:
将总的内存空间分为新生代,老年代,不同的代采用不同的算法
分区算法
实现:
将堆空间分为连续的不同小区间,每个小区间独立GC。每次GC时仅对需要GC的空间进行GC。减少一次GC时候的stop-the-world的时间。
(可以参考减少锁粒度的性能优化思想,实际上也是减少GC粒度)
- 基本的垃圾回收算法总结
- 基本垃圾回收算法
- 垃圾回收基本算法
- 基本垃圾回收算法
- 漫谈JVM的基本垃圾回收算法
- 漫谈JVM的基本垃圾回收算法
- 漫谈JVM的基本垃圾回收算法
- JVM的基本垃圾回收算法
- 垃圾回收算法总结
- JVM调优总结(三)-基本垃圾回收算法
- JVM调优总结-基本垃圾回收算法
- JVM调优总结(三)-基本垃圾回收算法
- JVM垃圾回收机制总结(2) :基本算法概述
- JVM调优总结(三)-基本垃圾回收算法
- JVM垃圾回收机制总结(2) —基本算法概述
- JVM垃圾回收机制总结(2) :基本算法概述
- JVM调优总结(三)-基本垃圾回收算法
- JVM调优总结(三)-基本垃圾回收算法
- JAVA中的异常和处理
- Android Audio System 架构初探(好文)
- 18005 It is not ugly number
- 【Java8源码分析】NIO包-Buffer类:内存映射文件DirectByteBuffer与MappedByteBuffer(二)
- js中Uncaught SyntaxError: missing ) after argument list 的错误
- 基本的垃圾回收算法总结
- 一个linux 混音播放的 /etc/asound.conf 配置
- JavaScript-函数篇-002(Javascript构造函数)
- 学习淘淘商城第八十六课(单点登录用户注册Controller层实现及测试)
- C链表详解
- orcFile split和读数据原理总结(hive0.13)
- php+js实现极验拖动验证码-tncode
- JAVA异常分析总结
- 474. Ones and Zeroes Medium