垃圾回收算法

垃圾回收算法

1、标记-清除算法 2、复制算法 3、标记-整理算法

一、标记-清除算法

标记-清除算法采用从根集合进行扫描,对存活的对象对象标记,标记完毕后,再扫描整个空间中未被标记的对象,进行回收,如上图所示。 标记-清除算法不需要进行对象的移动,并且仅对不存活的对象进行处理,在存活对象比较多的情况下极为高效,但由于标记-清除算法直接回收不存活的对象,因此会造成内存碎片!

二、复制算法

复制算法采用从根集合扫描,并将存活对象复制到一块新的,没有使用过的空间中,这种算法当控件存活的对象比较少时,极为高效,但是带来的成本是需要一块内存交换空间用于进行对象的移动。也就是我们前面提到的s0 s1等空间。

三、标记-整理算法

标记-整理算法采用标记-清除算法一样的方式进行对象的标记,但在清除时不同,在回收不存活的对象占用的空间后,会将所有的存活对象往左端空闲空间移动,并更新对应的指针。标记-整理算法是在标记-清除算法的基础上,又进行了对象的移动,因此成本更高,但是却解决了内存碎片的问题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nnngu

03 JVM的垃圾回收机制

1、前言 理解JVM的垃圾回收机制(简称GC)有什么好处呢?作为一名软件开发者,满足自己的好奇心将是一个很好的理由,不过更重要的是,理解GC工作机制可以帮助你写...

2013
来自专栏刘晓杰

java虚拟机和内存模型

3427
来自专栏技术碎碎念

探究JVM——垃圾回收

垃圾回收主要考虑三件事情:哪些内存需要回收?什么时候回收?如何回收? 一、哪些内存需要回收? 堆内存:对于JVM 来说,垃圾回收主要是针对堆内存中的对象实例。 ...

32511
来自专栏wOw的Android小站

[JVM] 垃圾收集器与内存分配策略

经过发展,内存动态分配和回收技术已经成熟,为什么还要了解GC和内存分配呢? 当需要排查各种内存溢出,内存泄露问题时,当垃圾手机成为系统达到更高并发量的瓶颈时,就...

361
来自专栏我就是马云飞

Java 垃圾回收机制

自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未...

574
来自专栏Android开发实战

深入解析Java垃圾回收机制

程序计数器、 虚拟机栈、 本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。 每一个栈帧中分配多少内存基...

652
来自专栏编程心路

Java虚拟机内存管理(四)—垃圾回收

Java 虚拟机作为运行 Java 程序抽象出来的计算机,具有内存管理的能力,像内存分配、垃圾回收等这些相关的内存管理问题,Java 虚拟机都会帮我们解决,所以...

612
来自专栏desperate633

深入解析Java垃圾回收机制引入垃圾回收哪些内存需要回收?如何回收为什么需要分代收集?JVM的分代分代垃圾收集过程详述

自动垃圾回收机制就是寻找Java堆中的对象,并对对象进行分类判别,寻找出正在使用的对象和已经不会使用的对象,然后把那些不会使用的对象从堆上清除。 自动垃圾回收...

361
来自专栏牛肉圆粉不加葱

JVM GC 那些事(二)- 堆上的内存分配机制

前一篇文章JVM GC 那些事(一)- JVM 运行时内存划分介绍了 JVM 运行时的内存划分情况。本文将介绍 JVM GC “主战场” 堆上的内存分配机制。

481
来自专栏小勇DW3

JVM虚拟机学习一:垃圾回收算法总结

  基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所...

621

扫码关注云+社区