码迷,mamicode.com
首页 > 其他好文 > 详细

JVM原理与深度调优(三)

时间:2017-04-25 13:29:02      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:jvm垃圾回收   解决   控件   根搜索算法   垃圾回收   roo   nbsp   指针   交换   

jvm垃圾收集算法

 

1、引用计数算法
每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。还有一个问题是如何解决精准计数。
这种方法现在已经不用了 

2、根搜索算法
从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。不可达对象。

在java语言中,GC Roots包括:
虚拟机栈中引用的对象。
方法区中类静态属性实体引用的对象。
方法区中常量引用的对象。
本地方法栈中JNI引用的对象。

jvm垃圾回收算法

1、复制算法(Copying)

技术分享

 

  • 复制算法采用从根集合扫描,并将存活对象复制到一块新的,没有使用过的空间中,这种算法当控件存活的对象比较少时,极为高效,但是带来的成本是需要一块内存交换空间用于进行对象的移动。
  • 此算法用于新生代内存回收,从E区回收到S0或者S1

 从根集合扫描、就是刚才说的GC-Roots 收集算法、从它开始查你的引用、如果没有被引用、开始执行算法、并将存活对象复制到一块新的、(S0或者S1) 

2、标记清除算法

技术分享

 

  • 标记-清除算法采用从根集合进行扫描,对存活的对象标记,标记完毕后,再扫描整个空间中未被标记的对象,进行回收,如图所示。
  • 标记-清除算法不需要进行对象的移动,并且仅对不存活的对象进行处理,在存活对象比较多的情况下极为高效,但由于标记-清除算法直接回收不存活的对象,因此会造成内存碎片!

适合老生代去回收

技术分享

标记-整理算法采用标记-清除算法一样的方式进行对象的标记,但在清除时不同,在回收不存活的对象占用的空间后,会将所有的存活对象往左端空闲空间移动,并更新对应的指针。
标记-整理算法是在标记清除算法的基础上,又进行了对象的移动,因此成本更高,但是却解决了内存碎片的问题。

 

JVM原理与深度调优(三)

标签:jvm垃圾回收   解决   控件   根搜索算法   垃圾回收   roo   nbsp   指针   交换   

原文地址:http://www.cnblogs.com/w787815/p/6761155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!