jvm垃圾回收有哪些算法
1个回答
展开全部
1.堆的分代和区域
(年轻代)Young Generation(eden、s0、s1 space) Minor GC
(老年代)Old Generation (Tenured space) Major GC|| Full GC
(永久代)Permanent Generation (Permanent space)【方法区(method area)】 Major GC
本地化的String从JDK 7开始就被移除了永久代(Permanent Generation )
JDK 8.HotSpot JVM开始使用本地化的内存存放类的元数据,这个空间叫做元空间(Metaspace)
2.判断对象是否存活(哪些是垃圾对象)
1.引用计数(ReferenceCounting):对象有引用计数属性,增加一个引用计数加1,减少一个引用计数减1,计数为0时可回收。(无法解决对象相互循环引用的问题)
2.根搜索(GC Roots Tracing):GCRoot对象作为起始点(根)。如果从根到某个对象是可达的,则该对象称为“可达对象”(存活对象,不可回收对象)。否则就是不可达对象,可以被回收。
下图中,对象Object6、Object7、Object8虽然互相引用,但他们的GC Roots是不可到达的,所以它们将会被判定为是可回收的对象
3.垃圾收集算法
1.标记-清除(Mark-Sweep)算法:
标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对象。
缺点:
1、标记和清除效率不高;
2、产生大量不连续的内存碎片,导致有大量内存剩余的情况下,由于,没有连续的空间来存放较大的对象,从而触发了另一次垃圾收集动作。
2.复制(Copying)算法:
将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块用完之后,就将还存活的对象复制到另外一块上面,然后在把已使用过的内存空间一次清理掉。这样使得每次都是对其中的一块进行内存回收
(年轻代)Young Generation(eden、s0、s1 space) Minor GC
(老年代)Old Generation (Tenured space) Major GC|| Full GC
(永久代)Permanent Generation (Permanent space)【方法区(method area)】 Major GC
本地化的String从JDK 7开始就被移除了永久代(Permanent Generation )
JDK 8.HotSpot JVM开始使用本地化的内存存放类的元数据,这个空间叫做元空间(Metaspace)
2.判断对象是否存活(哪些是垃圾对象)
1.引用计数(ReferenceCounting):对象有引用计数属性,增加一个引用计数加1,减少一个引用计数减1,计数为0时可回收。(无法解决对象相互循环引用的问题)
2.根搜索(GC Roots Tracing):GCRoot对象作为起始点(根)。如果从根到某个对象是可达的,则该对象称为“可达对象”(存活对象,不可回收对象)。否则就是不可达对象,可以被回收。
下图中,对象Object6、Object7、Object8虽然互相引用,但他们的GC Roots是不可到达的,所以它们将会被判定为是可回收的对象
3.垃圾收集算法
1.标记-清除(Mark-Sweep)算法:
标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对象。
缺点:
1、标记和清除效率不高;
2、产生大量不连续的内存碎片,导致有大量内存剩余的情况下,由于,没有连续的空间来存放较大的对象,从而触发了另一次垃圾收集动作。
2.复制(Copying)算法:
将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块用完之后,就将还存活的对象复制到另外一块上面,然后在把已使用过的内存空间一次清理掉。这样使得每次都是对其中的一块进行内存回收
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询