垃圾收集算法!

1.标记清除算法:

分为两步 “标记” 和 “清除” 两个阶段。标记阶段在《对象已死吗》一文已经介绍过。  这个算法主要有两个不足:一是效率问题,“标记”和“清除”两个过程效率都不高,二是空间问题,标记清除之后会产生大量不连续的内存碎片,内存碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续空间而不得不提前触法另一次垃圾收集操作。

2.复制算法

3.标记整理算法

4.分代收集算法:根据对象的存活周期不同将内存划分为几块。一般是把java堆分为新生代和老年代。新生代使用复制算法,老年代使用标记清除算法。

时间: 2024-12-09 12:54:03

垃圾收集算法!的相关文章

JVM垃圾回收2(垃圾收集算法)

根据<深入理解java虚拟机>这本书总结 一.关于几个概念:(标记垃圾算法.垃圾收集算法.垃圾收集器) 前面说了如何寻找jvm垃圾,有两种方法:引用计数法/可达性算法.这篇准备讲,标记完垃圾之后,回收的算法,这里的算法只是垃圾回收的思想.后面会讲到多种垃圾收集器,这里的垃圾收集器就是运用了垃圾手机算法的思想,可以说是具体实现. 这里还是想多余的说一下这三个概念: 垃圾标记算法:标记垃圾的方法 垃圾收集算法:一种回收思想,供垃圾收集器使用.可能用在年轻代,也可能用在老年代(当然现在来说老年代和年

对象是否有被引用判断及垃圾收集算法

1.引用计数算法 给对象中添加一个计数器,每当一个地方引用它时,计数器值就加1:当引用失效时就减1.如果两个对象存在相互的引用,尽管这两个引用已经不再被使用,但还是不能被清除.通过一些实验可得SUN公司的JVM没有采用这种算法. 2.根搜索算法 该算法的基本思路是通过一系列的名为"GCRoots" 的对象作为起点,从这些起点开始向下搜索.搜索所通过的路径(引用链:Reference chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的.在JAVA里可用

垃圾收集算法

[根搜索算法] 这个算法的基本思路是:对任何“活”的对象,一定能最终追溯到其存活在堆栈或静态存储区之中的引用. 可以作为根的对象 - 虚拟机栈(栈桢中的本地变量表)中的引用的对象. - 方法区中的类静态属性引用的对象. - 方法区中的常量引用的对象. - 本地方法栈中JNI的引用的对象. 方法区是jvm的一块内存区域,用来存放类相关的信息.很明显,java中单例模式创建的对象被自己类中的静态属性所引用,符合第二条,因此,单例对象不会被jvm垃圾收集. classSingleton {      

【Java 之 JVM】垃圾收集算法

一.判断对象是否存活--可达性分析算法 基本思想:通过一系列成为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots 没有任何引用相连则证明该对象是不可用的.在判断完无链之后,还需经历两次标记过程,才会真正回收,暂略. 二.垃圾收集算法 1.标记--清除算法 标记出所有需要回收的对象,标记完统一回收.缺点:标记,清除2个过程效率都不高,大量不连续的内存碎片. 2.复制算法 将内存划分为大

JVM(五)-垃圾收集算法和垃圾收集器

一.垃圾收集算法 (1)标记-清除算法 "标记-清除"(Mark-Sweep)算法,如它的名字一样,算法分为"标记"和"清除"两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象.之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其缺点进行改进而得到的. 它的主要缺点有两个:一个是效率问题,标记和清除过程的效率都不高:另外一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致,

JVM垃圾收集算法(标记-清除、复制、标记-整理)

 [JVM垃圾收集算法] 1)标记-清除算法: 标记阶段:先通过根节点,标记所有从根节点开始的对象,未被标记的为垃圾对象(错了吧?) 清除阶段:清除所有未被标记的对象 2)复制算法: 将原有的内存空间分为两块,每次只使用一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未被使用的内存块中,然后清除正在使用的内存块中的所有对象. 3)标记-整理算法: 标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的为垃圾对象 整理阶段:将所有的存活对象压缩到内存的一段,之后清理边界所有的空间

深入理解Java虚拟机笔记---垃圾收集算法

当对象判定为"已死"状态,虚拟就要采取一定的手段将这些对象从内存中移除,即回收垃圾,回收过程有采用一定的算法.如下是一些主要的垃圾收集算法: 1.标记-清除算法 该算法是最基础的算法,分为"标记"和"清除"两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象.之所有说它是最基础的算法是因为后续的收集算法都是基于这种思路并对其缺点进行改进得到的.它的缺点主要有两个:一个是效率问题,标记和清除过程效率都不高:另外一个是空间问

垃圾收集算法思路

垃圾收集算法思路:把对象按照寿命长短分组,分为年轻代和年老代,新创建对象被分在年轻代,如果对象经过几次回收后仍然存活,那么再把这个对象分到年老代. 年老代的收集频度不像年轻代的频繁,这样就减少了每次垃圾收集时所扫描的对象数量,从而提高垃圾回收效率 Young : 分为eden区和两个Survivor区,新建对象都在eden区,当eden区满后触发minor GC ,将Eden区仍然存活的对象复制到其中一个survivor区,再把另一 个survivor区中的存活对象复制到这个survivor区,

JVM虚拟机——垃圾收集算法

原文博客链接:http://www.cnblogs.com/leesf456/p/5218594.html 1.哪些内存需要进行垃圾回收 对于虚拟机中线程私有的区域,如程序计数器.虚拟机栈.本地方法栈都不需要进行垃圾回收,因为它们是自动进行的,随着线程的消亡而消亡,不需要我们去回收,比如栈的栈帧结构,当进入一个方法时,就会产生一个栈帧,栈帧大小也可以借助类信息确定,然后栈帧入栈,执行方法体,退出方法时,栈帧出栈,于是其所占据的内存空间也就被自动回收了.而对于虚拟机中线程共享的区域,则需要进行垃圾

深入理解_JVM内存管理垃圾收集算法04

1.垃圾收集算法(方法论): 定义:JVM通过GC来回收堆和方法区中的内存. GC的基本原理:首先会找程序中不再被使用的对象:然后回收这些对象所占用的内存. 算法分类: (1) 按照基本回收策略分: <1>引用计数(Reference Counting): 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回收时,只用收集计数为0的对象.此算法最致命的是无法处理循环引用的问题. <2> 标记-清除(Mark-Sweep): Before G