JVM垃圾回收算法
2016-03-23 13:39
267 查看
1、标记清除法
标记阶段:标记所有从根节点开始的可达对象
清除阶段
最大问题:空间碎片
2、复制算法
java的新生代串行垃圾回收器:新生代,老年代
3、标记压缩法
4、分代算法
卡表
5、分区算法
二、引用
强引用:可能导致内存泄露
软引用:
弱引用:
虚引用:
三、JVM调优
1、Minor GC,Major GC和Full GC的触发机制区别
深奥:http://www.importnew.com/15820.html
Minor GC 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存
当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。
内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden 和 Survivor 区进行了标记和复制操作,取代了经典的标记、扫描、压缩、清理操作。所以 Eden 和 Survivor 区不存在内存碎片。写指针总是停留在所使用内存池的顶部。
执行 Minor GC 操作时,不会影响到永久代。从永久代到年轻代的引用被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。
质疑常规的认知,所有的 Minor GC 都会触发“全世界[b]的暂停(stop-the-world)”[/b],停止应用程序的线程。对于大部分应用程序,停顿导致的延迟都是可以忽略不计的。其中的真相就 是,大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多。
所以 Minor GC 的情况就相当清楚了——每次 Minor GC 会清理年轻代的内存。
Major GC 是清理永久代。
Full GC 是清理整个堆空间—包括年轻代和永久代。
JVM调优的基本思路是什么?
标记阶段:标记所有从根节点开始的可达对象
清除阶段
最大问题:空间碎片
2、复制算法
java的新生代串行垃圾回收器:新生代,老年代
3、标记压缩法
4、分代算法
卡表
5、分区算法
二、引用
强引用:可能导致内存泄露
软引用:
弱引用:
虚引用:
三、JVM调优
1、Minor GC,Major GC和Full GC的触发机制区别
深奥:http://www.importnew.com/15820.html
Minor GC 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存
当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。
内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden 和 Survivor 区进行了标记和复制操作,取代了经典的标记、扫描、压缩、清理操作。所以 Eden 和 Survivor 区不存在内存碎片。写指针总是停留在所使用内存池的顶部。
执行 Minor GC 操作时,不会影响到永久代。从永久代到年轻代的引用被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。
质疑常规的认知,所有的 Minor GC 都会触发“全世界[b]的暂停(stop-the-world)”[/b],停止应用程序的线程。对于大部分应用程序,停顿导致的延迟都是可以忽略不计的。其中的真相就 是,大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多。
所以 Minor GC 的情况就相当清楚了——每次 Minor GC 会清理年轻代的内存。
Major GC 是清理永久代。
Full GC 是清理整个堆空间—包括年轻代和永久代。
JVM调优的基本思路是什么?
相关文章推荐
- /etc/security/limits.conf 配置
- /etc/security/limits.conf 配置
- SVN客户端和服务端安装 详解
- 京东话费充值,点击出现的css样式
- SSH学习之Struts1深入学习
- Linux解压缩命令
- 2016年数据结构:单链表的使用
- Invalid file name: must contain only [a-z0-9_.]
- 控制器在退出的时候不执行dealloc方法
- PHP登录session验证实例
- 微信,是怎么过来的
- iOS开发 接入InMobi广告平台的一些个人经验
- NSURLConnection学习笔记
- 微信,是怎么过来的
- pydev安装
- PAT(Basic Level) 人口普查(20)
- Java Maven项目引入Maven Dependencies
- RHEL7恢复root密码
- 使用K-means分析RFM
- Android适配器之SimpleAdapter