3.JVM垃圾回收机制-如何回收内存
2018-03-09 09:41
302 查看
在前面的文章中,我们已经介绍过哪些内存需要回收以及什么时候回收。
哪些内存需要回收:http://blog.csdn.net/u011983531/article/details/49227013
什么时候回收:http://blog.csdn.net/u011983531/article/details/79479972
在本篇中,我们来看看具体如何回收已经不可用的内存。
因为JVM使用了分代回收的思想,所以针对不同的内存区域,会采用不同的收集算法。
下面,我们对所有的收集器做一个对比。
新生代:
老年代:
哪些内存需要回收:http://blog.csdn.net/u011983531/article/details/49227013
什么时候回收:http://blog.csdn.net/u011983531/article/details/79479972
在本篇中,我们来看看具体如何回收已经不可用的内存。
一.垃圾回收算法
算法 | 描述 | 优点 | 缺点 |
---|---|---|---|
标记-清除算法 | 首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象 | 简单 | 1.效率不高,标记和清除过程效率都不高;2标记清除后会留下大量不连续的内存空间 |
复制算法 | 将可用内存分为大小相等的两块,每次使用其中一块,当一块内容用完时,就将还存活的对象复制到另一块上面,然后再把使用过的空间一次性清理掉 | 实现简单,运行高效 | 将可用内存空间缩小为原来的一半 |
标记-整理算法 | 首先标记出所有需要回收的对象,然后让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存 | 没有内存碎片 | 效率低 |
二.垃圾收集器
垃圾回收算法是内存回收的方法论,垃圾收集器是内存回收的具体实现。虚拟机包含的所有收集器如下图。因为JVM使用了分代回收的思想,所以针对不同的内存区域,会采用不同的收集算法。
下面,我们对所有的收集器做一个对比。
新生代:
垃圾收集器 | 算法 | 是否Stop The Word | 线程 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|---|---|
Serial | 复制算法 | 是 | 单线程 | 运行在Client模式下的虚拟机 | 简单 | 1.效率低;2.垃圾收集期间必须暂停所有的工作 |
ParNew | 复制算法 | 是 | 多线程 | 适用于多CPU的环境 | 在多核情况下,能充分利用系统资源 | 垃圾收集期间必须暂停所有的工作 |
Parallel Scavenge | 复制算法 | 是 | 多线程 | 吞吐量优先的系统 | 能够控制吞吐量 | 垃圾收集期间必须暂停所有的工作 |
垃圾收集器 | 算法 | 是否Stop The Word | 线程 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|---|---|
Serial Old | 标记-整理算法 | 是 | 单线程 | 运行在Client模式下的虚拟机 | 简单 | 1.效率低;2.垃圾收集期间必须暂停所有的工作 |
Parallel Old | 标记-整理算法 | 是 | 多线程 | 吞吐量优先的系统 | 能够控制吞吐量 | 垃圾收集期间必须暂停所有的工作 |
CMS | 标记-清除算法 | 是 | 多线程 | B/S系统的服务端 | 效率高,基本能实现垃圾收集线程与用户线程同时工作 | 1.对CPU资源非常敏感;2.无法处理浮动垃圾;3.收集结束后会产生大量的内存碎片 |
相关文章推荐
- 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前篇)—托管资源优化—垃圾回收机制深度剖析
- 构建高性能ASP.NET站点 第七章 如何解决内存的问题(前篇)―托管资源优化―垃圾回收机制深度剖析
- 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前篇)—托管资源优化—垃圾回收机制深度剖析
- 垃圾回收机制GC知识再总结兼谈如何用好GC(其他信息: 内存不足)
- 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前篇)—托管资源优化—垃圾回收机制深度剖析
- JAVA垃圾回收机制与内存泄露问题
- java虚拟机系列--内存分配与垃圾回收机制
- php内存管理机制、垃圾回收机制
- Java基础之垃圾回收机制以及内存泄露
- Java中内存泄露及垃圾回收机制
- JAVA内存垃圾回收机制
- php垃圾回收和内存管理机制
- 如何理解.net中的垃圾回收机制
- PHP垃圾回收机制防止内存溢出
- PHP垃圾回收机制防止内存溢出
- PHP垃圾回收机制防止内存溢出
- 内存分析#垃圾回收机制
- android内存自动清理机制和android垃圾回收器
- Java的初始化机制、垃圾回收机制和内存分配机制
- java内存垃圾回收机制