欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jvm知识点-垃圾回收的方法

程序员文章站 2022-05-13 23:11:29
...

java 中垃圾回收的方法有哪些呢

 1.标记-清理

这个垃圾回收方法 根据名字就可以知道,他的思想就是标记那些要回收的对象,然后统一回收清理,这个方法方法简单,但是会有两个主要问题:

(1)效率不高,标记和清除的效率低下,(2)会产生大量的内存碎片,导致程序在分配较大的对象时,没有足够内存提前触发一次GC动作


jvm知识点-垃圾回收的方法
            
    
    博客分类: jvm jvmGC 
 

2 .复制算法

 为了解决效率问题,复制算法将可用内存按容量划分为相等的两部分,然后每次使用其中的一块,当一块内存使用完时,就将还存活的对象复制到第二块内存上,然后

一次性清楚完第一块内存,再讲第二块的对象复制到第一块,但是这种方式,内存的代价太大,每次基本都要浪费一般的内存。

于是将该算法进行了改进,内存区域不再1:1划分,而是讲内存划分为8:1:1三部分,较大那份内存交给Eden区,其余的两个 较小的内存区叫Survior区,每次都会优先使用Eden区,

若Eden区满,就将对象复制到第二块内存上,然后清楚Eden区,如果此时存活的对象太多,以至于Survivor不够时,会将这些对象通过分配担保机制复制到老年代中。


jvm知识点-垃圾回收的方法
            
    
    博客分类: jvm jvmGC 
 

3.标记-整理

该算法主要是为了解决标记-清理,产生大量内存碎片的问题;当对象存活率较高时,也解决了复制算法的效率问题。

他的不同之处就是在清理对象的时候将存活的对象移动到一端,然后清除掉边界以外的对象,这样就不会产生内存碎片了


jvm知识点-垃圾回收的方法
            
    
    博客分类: jvm jvmGC 
 

4.分代收集

现在虚拟机垃圾收集大多采用这样的方法,它根据对象的生存周期,将堆分为新生代和老年代。在新生代中,由于对象生存周期短,每次回收都有大量对象死去,那么这时

就采用复制算法。老年代里的对象存活率较高,没有额外的空间进行分配担保,所以使用标记-整理或者标记-清除

  • jvm知识点-垃圾回收的方法
            
    
    博客分类: jvm jvmGC 
  • 大小: 137.7 KB
  • jvm知识点-垃圾回收的方法
            
    
    博客分类: jvm jvmGC 
  • 大小: 174.4 KB
  • jvm知识点-垃圾回收的方法
            
    
    博客分类: jvm jvmGC 
  • 大小: 129.3 KB
相关标签: jvm GC