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

 【JVM垃圾收集算法】

1)标记-清除算法:

  标记阶段:先通过根节点,标记所有从根节点开始的对象,未被标记的为垃圾对象(错了吧?)

  清除阶段:清除所有未被标记的对象

2)复制算法:

  将原有的内存空间分为两块,每次只使用一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未被使用的内存块中,然后清除正在使用的内存块中的所有对象。

3)标记-整理算法:

  标记阶段:先通过根节点,标记所有从根节点开始的可达对象,未被标记的为垃圾对象

  整理阶段:将所有的存活对象压缩到内存的一段,之后清理边界所有的空间

三种算法的比较:

  效率: 复制 > 标记整理 > 标记清除  (此处的效率只是简单的对比时间复杂度,实际情况不一定如此)

  内存利用率: 标记整理 > 标记清除 > 复制

  内存整齐度: 复制 = 标记整理 > 标记清除

时间: 2024-10-08 09:45:01

JVM垃圾收集算法(标记-清除、复制、标记-整理)的相关文章

jvm 垃圾收集算法

经过上篇如何判断对象是否死亡,那么jvm要对死亡的对象进行垃圾回收,垃圾回收的算法主要有以下几种: 一.标记-清楚算法 该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象.它是最基础的收集算法,后续的算法都是对其不足进行改进得到.这种垃圾收集算法会带来两个明显的问题: 一个是效率问题,标记和清除两个过程的效率都不高 一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的

jvm垃圾收集(标记-清除,复制,标记-整理,分代)算法

1. 标记 - 清除算法  标记清除算法是最基础的收集算法,其他收集算法都是基于这种思想.标记清除算法分为"标记"和"清除"两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对象. 它的主要缺点:①.标记和清除过程效率不高 . ②.标记清除之后会产生大量不连续的内存碎片. . 2. 复制算法 它将可用内存容量划分为大小相等的两块,每次只使用其中的一块.当这一块用完之后,就将还存活的对象复制到另外一块上面,然后在把已使用过的内存空间一次理掉.这样使得每次都是对其

java比c++强大之处jvm垃圾收集算法

java可以自动进行垃圾收集,c++需要手动释放内存,这个功能将程序员解放出来,能将更多的注意力放在需要实现的业务上,这也是java相对c++的一个巨大优势,jvm有哪些垃圾收集算法呢? 标记清除算法:算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象 从图中可以看出这种算法的缺点在于,垃圾被回收以后造成了大量不连续的内存碎片.碎片太多可能会导致以后需要分配较大对象时,无法找到连续的足够内存从而频繁触发垃圾收集,降低系统效率. 复制算法:为了解决"标记

JVM——垃圾收集算法

标记-清除算法 复制算法 标记-整理算法 分代收集算法 1.标记-清除算法 最基础的收集算法,如其名,算法为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象. 两个不足: 1)效率问题,标记和清除两个过程的效率多不高: 2)空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前出发另一次垃圾收集动作. 2.复制算法 这种算法是为了解决效率的问题.它将可用内存按

Jvm垃圾收集算法

标记-清除 标记-清除算法是现代垃圾回收算法的思想基础.标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段.一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象.因此,未被标记的对象就是未被引用的垃圾对象.然后,在清除阶段,清除所有未被标记的对象 标记-整理 根据老年代的特点提出标记-整理算法.它在标记-清除算法的基础上做了一些优化.和标记-清除算法一样,标记-整理算法也首先需要从根节点开始,对所有可达对象做一次标记.但之后,它并不简单的清理未标记的对象,而是将所有

【004】【JVM——垃圾收集算法】

 垃圾收集算法 垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,介绍几种垃圾收集算法的思想及其发展过程. 标记-清除算法 垃圾收集分为"标记"和"清除"两个阶段:首先标记所有需要回收的对象,在标记完成后统一回收所有被标记的对象.说它是最基础的收集算法,其他收集算法都是基于这种思路并对其不足进行改进而得到的.它的主要不足有两个: 效率问题,标记和消除两个过程的效率都不高: 空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎

JVM垃圾收集算法的选择

1. 介绍 JVM提供了多种垃圾收集器,应该根据应用选择一种合适的垃圾收集器. 垃圾回收管理内存通过如下操作: 在年轻代分配对象,把年龄大的对象晋升到老年代. 当年老代超过阈值的时候,并发标记收集. 通过合并内存,拷贝内存的方式对内存进行整理,回收可以内存. 垃圾回收什么时候会产生问题?对于有些应用,垃圾回收永远都不会成为问题,有些应用在垃圾回收期间短暂的暂 停,适当的垃圾回收频率下也可以表现的很好. 阿姆达尔定律(http://ifeve.com/amdahls-law/)意味着程序的性能受限

JVM理论:(二/3)垃圾收集算法、垃圾收集器

掌握三种垃圾算法,七种垃圾收集器,了解每种垃圾收集器使用的是哪种垃圾收集算法,以及关于SafePoint的知识点. 垃圾收集算法 1.标记-清除算法(Mark-Sweep) 先标记(如可达性算法)出所有需要回收的对象,标记完后再统一回收所有被标记的对象. 缺点:标记和清除过程的效率都不高,且清除后会产生大量不连续的内存碎片. 2.复制算法(Copying) 将可用内存划分为大小相等的两块,每次只使用其中的一块.当其中一块的内存用完了,就将还存活的对象复制到另一块内存上,然后再把已使用过的内存空间

JVM中的垃圾回收器及垃圾收集算法描述

首先需要了解下JVM(Java虚拟机)中的内存分配情况: 收集器的介绍: Serial收集器:是最原始的收集器,是单线程的,实现简单,但是在后台收集垃圾的时候,其他的工作线程都会停止,直到垃圾收集线程执行完毕,给用户的体验就是出现停顿现象,体验差.但是当收集的垃圾少,停顿时间短,次数少,还是可以接受的.运行在Client模式下是一个很好的选择.ParNew收集器:是Serial收集器的多线程办,不过在单处理器下效果不比Serial收集器效果好,多线程会采取对应的机制,默认开始的线程数量和CPU的