Java中的垃圾回收算法
来源:互联网 发布:unity3d加速器 编辑:程序博客网 时间:2024/05/02 01:13
Java中的垃圾回收算法
1. 引用计数算法(Reference Counting Collector)
引用计数原理:
- 在堆中,对每个对象都有个引用计数器,被引用时,计数器+1;
- 当引用被置空或离开作用域,引用计数器-1。
无法解决互相引用问题,所以JVM没有采用。同时效率低下
2. 追踪回收算法(Tracing Collector)
原理:
- 利用JVM维护的对象引用图,从根节点遍历对象的引用图,同时标记遍历到的对象。
- 当遍历结束后,未被标记的对象就是不再被使用的对象,可以回收。
3. 压缩回收算法(Compacting Collector)
原理:
- 将堆中活动的对象“移动”到堆中一端,这样会在堆中另外一端留出大的空闲区域。相当于对堆中的碎片进行处理。
该方法可以简化消除堆碎片的工作,但每次处理会带来性能损失。
4. 复制回收算法(Coping Collector)
原理:
- 把堆分成两个大小相同的区域,任何时候,仅有其中之一被使用,直到这个区域被消耗完为止。
- 此时,GC会中断程序的执行,使用遍历的方式将活动对象复制到另一区域中,复制过程中,紧挨着布置,消除了内存碎片。当复制结束后,程序会继续运行,知道此区域被使用完,然后使用同样方式进行垃圾回收。
- 优点: 垃圾回收的同时,对对象的不知进行了安排,消除了内存碎片
- 缺点:需要较高的内存空间的代价;同时由于在内存调整的过程中要中断当前执行的程序,会降低程序的执行效率。
5. 按代回收算法(Generational Collector)
原因:
复制回收算法效率低,每次处于活动状态的对象需要被复制
程序的特点:
程序创建的大部分对象的生命周期很短,只有部分对象才有较长生命周期
原理:
- 把堆分成两个或多个子堆,每个子堆视为一代。算法在收集过程中优先收集“年幼”的对象,如果一个对象多次收集仍然“存活”,那么就可以将对象转移到更高级的堆里,减少扫描次数。
- Java中的垃圾回收算法
- Java中的垃圾回收算法
- Java中的垃圾回收算法
- java垃圾回收机制中的算法
- java垃圾回收算法
- java 垃圾回收 算法
- Java 垃圾回收算法
- java垃圾回收算法
- java垃圾回收算法
- java垃圾回收算法
- java垃圾回收算法
- java垃圾回收算法
- JAVA - 垃圾回收算法
- java垃圾回收算法
- Java垃圾回收算法
- java 垃圾回收算法
- JAVA垃圾回收算法
- Java垃圾回收算法
- MySQL server has gone away 问题的解决方法
- Android启动模式总结
- Spring-Web项目中的异常处理
- 捕获Application全局异常
- try catch 和 throwde
- Java中的垃圾回收算法
- 小马哥---高仿苹果6sp 主板型号z18机型 6582刷机拆机主板图与开机界面图
- Linux内核如何装载和启动一个可执行程序
- runtime error (运行时错误)
- 给定两个字符串newspaper和message,检查是否能够使用newspaper中的字母来组成message
- C++ Primer 第五版(中文版) ----容器与继承练习15.28 & 15.29
- Apache POI 读写 Excel file (.xls or .xlsx)
- spark中的共享参量函数
- mysql优化经验