在标记-清除-压缩的紧凑阶段之后,空闲的内存块不会进入伊甸园。伊甸园是垃圾收集器中的一个区域,用于存放被标记为可回收但尚未被释放的对象。在标记-清除-压缩的过程中,垃圾收集器会标记并清除不再使用的对象,并将存活的对象进行压缩,以便更好地利用内存空间。在这个过程中,空闲的内存块会被整理并重新分配给新的对象,而不会进入伊甸园。伊甸园主要用于存放存活时间较长的对象,以提高垃圾收集的效率。
、静态变量引用的对象 标记阶段:沿着 GC Root 对象的引用链找,直接或间接引用到的对象加上标记 清除阶段:释放未加标记的对象占用的内存 要点: 标记速度与存活对象线性关系 清除速度与内存大小线性关系...缺点是会产生内存碎片 标记整理法 解释: 前面的标记阶段、清理阶段与标记清除法类似 多了一步整理的动作,将存活对象向一端移动,可以避免内存碎片产生 特点: 标记速度与存活对象线性关系 清除与整理速度与内存大小成线性关系...缺点是性能上较慢 标记复制法 解释: 将整个内存分成两个大小相等的区域,from 和 to,其中 to 总是处于空闲,from 存储新创建的对象 标记阶段与前面的算法类似 在找出存活对象后,...当伊甸园内存不足,标记伊甸园与 from(现阶段没有)的存活对象 将存活对象采用复制算法复制到 to 中,复制完毕后,伊甸园和 from 内存都得到释放 将 from 和 to 交换位置 经过一段时间后伊甸园的内存又出现不足...G1 回收阶段 - 并发标记与混合收集 当老年代占用内存超过阈值后,触发并发标记,这时无需暂停用户线程 并发标记之后,会有重新标记阶段解决漏标问题,此时需要暂停用户线程。
复制算法 为了解决标记-清除算法在垃圾收集效率方面的缺陷,它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。...在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中,之后清除正在使用的内存块中的所有对象,交换两个内存的角色,最后完成垃圾回收。 ?...所以现在的商业虚拟机都是用这种收集算法回收新生代。 ? 标记-压缩算法 第一阶段和标记清除算法一样,从根节点开始标记所有被引用对象 第二阶段将所有的存活对象压缩到内存的一端,按顺序排放。...标记–压缩算法的最终等同于标记清除算法执行后,在进行一次内存碎片整理,因此,可以把他称为标记–清除–压缩算法 二者的本质差异在于 标记-清除算法是一种非移动式的回收算法(空闲列表记录位置), 标记-压缩是移动式的...总结: 内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度的问题) 内存整齐度:复制算法=标记压缩算法>标记清除算法 利用率:标记压缩算法=标记清除算法>复制算法 思考:难道没有更优的算法吗?
垃圾回收算法 标记-清除 思想 这个咱们可以按照名字来理解了,整个算法分为两个阶段,分别是标记和清除。...标记阶段,咱么在上面已经介绍过了,就是标记需要回收的资源或则不需要回收的资源。 清除阶段,就是回收刚刚标记的对象或未被标记的对象,具体怎么回收就取决于你选择的算法了。...在之后伊甸园又满了,我们这时不仅仅要对伊甸园对象进行处理,也要对幸存区中存有数据的那一块进行处理,将二者之中幸存的对象移入到幸存区的另一块中,然后交换二者的角色(即交换from与to的角色)。...即先回收新生代,若是回收结束之后仍内存不足,在进行回收全部的空间。...标记-整理 思想 判断哪些对象未被不可回收的对象直接或间接引用,对其进行标记 清楚时,将可用的对象向前移动,从而使得内存空间更见紧凑,从而实现空间更加连续 优缺点 没有内存碎片 耗费时间较多,例如如果有引用对象引用就是将移动的对象
1、JVM内存图 2、JVM类加载器 在类加载阶段,通过一个类的全限定名来获取描述该类的二进制字节流的这个动作的“代码”被称为“类加载器”(Class Loader),这个动作是可以自定义实现的。...JDK8之前叫永久存储区,JDK8之后叫元空间。...轻GC 针对新生代和偶尔的幸存区(from,to) 重GC(全局GC) GC的算法:标记清除法 不需要额外内存空间,两次扫描,浪费时间,产生内存碎片 、标记压缩,复制算法(新生代、伊甸园区 )伊甸园区和...to区为空,引用计数器 GC算法总结: 内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度) 内存整齐度:复制算法=标记压缩算法>标记清除 内存利用率:标记压缩算法=标记清除>复制算法...8、JVM中对象如何在堆内存分配 1、指针碰撞(Bump The Pointer):内存规整的情况下; 2、空闲列表(Free List) 3、本地线程分配缓冲(Thread Local Allocation
Mark-Sweep(标记清除) Copying(拷贝) Mark-Compact(标记压缩或标记整理) 3.1、Mark-Sweep(标记清除) 3.1.1、Mark-Sweep(标记清除)应用原理...由上述得知,每一小块可回收内存均需要标记后单独清除,在业务量较大,频繁更新数据的情况下,会有个别的“碎片”长期存在于内存中不去使用,占用资源空间。...3.3.1、Mark-Compact(标记压缩或标记整理)应用原理 把有用的存活对象压缩到内存空间的最前面,对可回收的垃圾对象进行处理,如上图所示。...首先我们先考虑 Mark-Sweep(标记清除)和 Mark-Compact(标记压缩或标记整理),上面我们已经说到,这两种 GC 算法的缺点分别是:产生碎片化问题、内存回收效率低。...在这样的情况下,使用 Mark-Sweep(标记清除)和 Mark-Compact(标记压缩或标记整理)效率就太低了,会造成伊甸园区很快爆满或者大规模碎片化,而新产生的对象产生放进去的效率就会大大降低。
需要注意的是:所谓的清除,并不需要真正地把整个内存的字节进行清零操作,只需要把空闲对象的起始结束地址记录下来放入空闲列表里,表示这段内存是空闲的就行。...优点速度快,只需要做个标记就能知道哪一块需要被回收,但是他的缺点也是致命的。 他的主要缺点有两个:一是执行效率不稳定,二是会涉及到内存碎片化的问题。 可能有人会问,碎片化是什么意思呢?...他会让所以存活的对象都向内存空间一端移动,然后清除到边界以外的内存。 标记 移动 是什么样的弊端呢?标记-整理算法涉及到了对象的移动,在整理阶段,由于移动了可用对象,需要去更新引用。...标记-复制算法 标记-复制算法,相比前面的比较不同,他将内存空间分为两块,在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中,然后呢再清除正在使用的内存块中的所有对象。...MinorGC在这里采取的是标记复制算法,它将有用的对象存放到幸存区to,然后把伊甸园中的对象清除掉。 进入幸存区的幸运儿,将会被标记上一个“幸运值”,代表他们抗住了多少次清理。
标记-清除算法分为两个阶段:标记阶段和清除阶段。 标记阶段的任务是标记出所有需要被回收的对象,清除阶段就是回收被标记的对象所占用的空间。...标记-清除算法不需要进行对象的移动,只需对不存活的对象进行处理,在存活对象比较多的情况下极为高效,但由于标记-清除算法直接回收不存活的对象,因此会造成内存碎片。...该算法标记阶段和Mark-Sweep一样,但是在完成标记之后,它不是直接清理可回收对象,而是将存活对象都向一端移动(记住是完成标记之后,先不清理,先移动再清理回收对象),然后清理掉端边界以外的内存 标记...-整理算法采用标记-清除算法一样的方式进行对象的标记,但在清除时不同,在回收不存活的对象占用的空间后,会将所有的存活对象往左端空闲空间移动,并更新对应的指针**。...阈值可以用户自己设定 新生代和老年代都会进行垃圾回收 5.3.1 新生代收集 整体上和前面的新生代的回收机制差不多,先分配到伊甸园,伊甸园不够收集复制到幸存区,幸存区达到一定年龄的会进入老年代
因为年轻代中的对象基本都是朝夕死(80%以上),所以在年轻代的垃圾回收算法使的是复制算法,复制算法的基本思想就是将内存分为两块,每次只其中块,当这块内存完就将活着的对象复制到另外块上。...清理出来的空闲内存不是连续的,我们的死亡对象都是随机的出现在内存的各个落,限制把他们清除之后,内存的布局然会乱七糟,为了应付这点,JVM不得不维持个内存的空闲列表,这是种开销,且在分配数组对象的时候,寻找连续的内存空间会不太好找...2) 标记整理(Mark-Compact) 1. 标记与标记-清除样 2. 压缩整理再次扫描,并往段滑动存活对象 效率不,不仅要标记所有存活对象,还要整理所有存活对象的引地址。...从效率上说,效率要低于复制算法 4 、总结 内存效率:复制算法>标记清除算法>标记整理算法 内存整度:复制算法=标记整理算法>标记清除算法 内存利率:标记整理算法=标记清除算法>复制算法 分代收集算法...GC回收策略,谈谈你的理解; 答:年轻代(伊甸园区+两个幸存区),GC回收策略为“复制”;年区的保存空间 般较,GC回收策略为“整理压缩”。 4.
标记阶段:需要回收的对象。那么这个过程其实就是使用可达性分析去判断一个对象是不是垃圾的过程。 清除阶段:标记完成之后,就会统一清理掉要回收的对象。...标记清除它存在一定的缺点,标记清除后会产生大量不连续的内存碎片,空间碎片太多可能会导致程序在运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。...首先也是标记要回收的对象,这个过程和标记清除是一样的,但是在标记完成之后并不是直接清除掉要回收的对象,而是把所有的存活对象都压缩到内存的一端,最后在清理掉边界之外的所有空间,所以不会产生内存碎片,提高了内存的利用率...用图表示出来大概如下图所示: 先去标记哪些对象是存活的,哪些对象可以回收,然后把存活的对象往内存的一端压缩,最后再把可以回收的对象除清除。...那么想找到一块连续空间的话,就需要去便利空闲链表,从而值查找哪一块内存可以存放这样的对象。那么在极端场景下,需要把整个链表全部遍历完,才能知道这个对象该分配到哪里去,又或者根本没有办法分配。
优点: 效率高:是指清除阶段不是把未被标记的对象内存直接清空置为0,而是直接将这段内存从占用状态改成可用状态,下次需要使用时直接覆盖就可以了。...缺点: 容易产生空间(内存)碎片:经过标记-清除算法的堆内存空间,可用的区域根本就不连续, 可能会导致后续过程中需要为大对象分配空间时无法找到足够的空间而提前触发新的一次垃圾收集动作...标记-整理算法(Mark-Compact): 标记-整理:采用从根集合(GC Roots)进行扫描,对存活的对象进行标记后,再将存活对象都向空闲的一端移动,并更新对应的指针, 最后在清理掉端边界以外的内存...(先不清理,先移动再清理回收对象) 优点: 不产生空间碎片:将所有存活对象整理到一端,边界以外被清理掉 缺点: 效率低:标记-整理算法是在标记-清除算法的基础上,又进行了对象的移动,因此成本更高...复制算法(Copying): 复制算法:将可用内存分为大小相等两块,每次只使用其中一块,当该内存使用完后,就将该内存中活着的对象复制到另一块内存;然后再将已使用过得内存一次性清理 这样每次都是对一块内存进行回收
最佳使用环境:对象存活度较低的时候,也就是年轻代 3、标记–清除算法 为每个对象存储一个标记位,记录对象的生存状态 标记阶段:这个阶段内,为每个对象更新标记位,检查对象是否死亡; 清除阶段:该阶段对死亡的对象进行清除...缺点:两次扫描严重浪费时间,会产生内存碎片 优点:不需要额外的空间 4、标记–整理算法 标记-整理法 是 标记-清除法 的一个改进版。...又叫做 标记-清楚-压缩法 标记阶段,该算法也将所有对象标记为存活和死亡两种状态; 不同的是,在第二个阶段,该算法并没有直接对死亡的对象进行清理,而是将所有存活的对象整理一下,放到另一处空间,然后把剩下的所有对象全部清除...可以进一步优化,在内存碎片不太多的情况下,就继续标记清除,到达一定量的时候再压缩....总结 内存(时间复杂度)效率:复制算法 > 标记清除算法 > 标记压缩算法 内存整齐度:复制算法 = 标记压缩法 > 标记清除法 内存利用率:标记压缩法 = 标记清除法 > 复制算法 思考:有没有最优的算法
缺点是会产生内存碎片,碎片过多,仍会使得连续空间少。 标记整理 第一遍标记,第二遍整理,整理是指存活对象向一端移动来减少内存碎片,相对效率较低。...复制 开辟两份大小相等空间,一份空间始终空着,垃圾回收时,将存活对象拷贝进入空闲空间,优点是不会有内存碎片,但占用空间多。...分代垃圾回收 尝试在伊甸园分配 对象优先在『伊甸园』分配,当『伊甸园』没有足够的空间时,触发 Minor GC ,将『伊甸园』和『幸存区 From』中仍然存活的对象利用 复制算法 移入『幸存区 To』...老年代) 标记清除 首先标记出所有需要回收的对象,在标记完成后统一回收掉被标记的对象 (老年代) 优点:实现简单,不需要对象进行移动 缺点:第一个是执行效率不稳定,第二个是内存空间的碎片化问题 标记复制...将可用内存按容量划分为大小相等的两块,每次使用其中的一块,这一块用完了就将还存活者的对象复制到另一块上面 (新生代) 优点:按顺序分配内存即可,实现简单、运行高效,不用考虑内存碎片 缺点:内存缩小到原来的一半
绝大多数情况下,对象首先分配在eden区,在新生代回收后,如果对象还存活,则进入s0或s1区,之后每经过一次 新生代回收,如果对象存活则它的年龄就加1,对象达到一定的年龄后,则进入老年代。...五、垃圾收集算法 标记清除算法 该算法有两个阶段。...标记阶段:找到所有可访问的对象,做个标记 清除阶段:遍历堆,把未被标记的对象回收 应用场景: 该算法一般应用于老年代,因为老年代的对象生命周期比较长。...标记和清除的效率不高,尤其是要扫描的对象比较多的时候 会造成内存碎片(会导致明明有内存空间,但是由于不连续,申请稍微大一些的对象无法做到), 标记压缩算法 标记清除算法和标记压缩算法非常相同,但是标记压缩算法在标记清除算法之上解决内存碎片化...优缺点 优点:在存活对象不多的情况下,性能高,能解决内存碎片和java垃圾回收算法之-标记清除 中导致的引用更新问题。 缺点: 会造成一部分的内存浪费。
缺点 标记清除算法的效率不算高 在进行GC的时候,需要停止整个应用程序,用户体验较差 这种方式清理出来的空闲内存是不连续的,产生内碎片,需要维护一个空闲列表 何为清除?...核心思想 将活着的内存空间分为两块,每次只使用其中一块,在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中,之后清除正在使用的内存块中的所有对象,交换两个内存的角色,最后完成垃圾回收 优点...在许多现代的垃圾收集器中,人们都使用了标记-压缩算法或其改进版本。 执行过程 第一阶段和标记清除算法一样,从根节点开始标记所有被引用对象 第二阶段将所有的存活对象压缩到内存的一端,按顺序排放。...之后,清理边界外所有的空间。 标记-压缩算法的最终效果等同于标记-清除算法执行完成后,再进行一次内存碎片整理,因此,也可以把它称为标记-清除-压缩(Mark-Sweep-Compact)算法。...而为了尽量兼顾上面提到的三个指标,标记-整理算法相对来说更平滑一些,但是效率上不尽如人意,它比复制算法多了一个标记的阶段,比标记-清除多了一个整理内存的阶段 难道就没有一种最优算法吗?
), -Xms1024m -Xmx1024m 堆内存细分 新生代 8:1:1----》伊甸园,幸存区0,幸存区1 老生区 永久区 1.6 :永久代,常量池在方发区 1.7:永久代,常量池位于堆...垃圾回收都在伊甸园,老生区 伊甸园满了---》对伊甸园轻GC--->进入幸存区----》也满了---》对伊甸园,幸存区重GC-----》进入养老区---》又满了----》OOM 但进入老生区对象很少...-》轻GC---》到幸存区0(随机选一个) 伊甸园又满了---》轻GC--》存回对象会放到幸存区1,且就会把幸存区0的复制到幸存1,幸存0变为空 再此GC时,存活对象--》0,幸存1也复制到0 经历了15...次GC,进入养老区, 可调参数 标记清除(2次扫描费时间,会产生碎片,但不浪费空间) 扫描对象,标记活的对象 清除没标记的 标记清除压缩 标记清除再此扫描,整理碎片 总结 新生代:存活率低,适用复制算法...老生代:标记清除或标记清除压缩 JMM java内存模型 缓存一致性协议,定义数据读写规则 线程操作共享变量时,不能保证及时刷新入内存,volilate关键字可以保证及时刷新到内存 定义了8种指令的使用规则
根据Root根对象向下蔓延,标记延申的对象,该类对象将不被回收 标记清除 我们简述标记清除操作: /*标记清除操作*/ 1. 先进行标记处理 2....将未标记的数据清除,同时将标记的数据重新排序,紧密排列 /*优缺点*/ 1. 不会产生内存碎片 2....回收区域是堆内存,不包括虚拟机栈,在方法调用结束会自动释放方法占用内存 2. 判断无用对象,使用可达性分析算法和三色标记法标记存活对象,回收未标记对象 3....新生代:用于存储较新的数据,经过层层筛选进入老年代 伊甸园:新生代的一块区域,用于存放所有新进入的数据 幸存区:用于存放经过GC的数据,采用from,to也就是标记复制的方法保存...,但只会赋默认值 针对final引用类型,静态变量static和static静态代码块的信息都是在初始化阶段才会赋值 (将其按从上到下的顺序保存到一个static方法中统一执行) 针对
虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,知道达到阀值对象进入老年区。...当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。...GC最基础的算法有三种: 标记 -清除算法、复制算法、标记-压缩算法,我们常用的垃圾回收器一般都采用分代收集算法。...标记-清除算法,“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。...标记-压缩算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存 分代收集算法,“分代收集”(Generational
在VM中,GC的实现过程恰恰相反,GC的目的是为了追踪所有正在使用的对象,并且将剩余的对象标记为垃圾,随后标记为垃圾的对象会被清除,回收这些垃圾对象占据的内存,从而实现内存的自动管理。...Eden,也就是伊甸园,是一块普通的在创建对象的时候进行对象分配的内存区域。...下一次YGC触发之后,空闲的那一块幸存者空间才会入驻对象。...清理阶段:收集器把所有未标记的对象进行清理和回收。 压缩阶段:收集器把所有存活的对象移动到堆内存的起始端,然后清理掉端边界之外的内存空间。...Mark-Copy算法 Mark-Copy算法,也就是标记-复制算法,和标记-清理-压缩算法十分相似,重要的区别在于:标记-复制算法在标记和清理完成之后,所有存活的对象会被复制到一个不同的内存区域 –
领取专属 10元无门槛券
手把手带您无忧上云