浅谈gc-垃圾回收

2024-09-06 03:48
文章标签 回收 浅谈 垃圾 gc

本文主要是介绍浅谈gc-垃圾回收,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

垃圾回收(Garbage Collection 简称GC

垃圾回收几种常用的算法有

l 引用计数法

l 标记清除法

l 复制算法

l 标记压缩法

引用计数法

引用计数法实现非常简单,对于对象A,只要有任何对象引用了A,则A的引用计数器则加1,当引用失效时则减1。只要对象A的引用计数器达到0,则对象A是不能被使用的,在下次GC时,则被当做回收对象被回收。


 

引用计数算法只需要为每个对象增加一个引用计数器即可。但是引发两个比较严重的问题:

1. 无法处理循环引用的对象,相互引用。所以Java中排除掉此种回收算法。

2. 每次引用产生跟消除时,都需要做一次加减法操作,对效率会有一定的影响。

 

 

标记清除法

首先介绍一下,标记清除法是现在垃圾回收算法的基础。标记清除法讲垃圾回收分为两个阶段:标记计算、清除阶段。一种可行的实现是通过对象根节点,标记所有从跟节点开始的所有可达对象。因此,未被标记的对象就是未被引用对象。然后在清除阶段中清除所有未被标记的对象。但是此算法有个非常大的弊端,会产生很多内存空间碎片。空间碎片使用的效率相对来说是比较低下的。

 

 

复制算法

复制算法的核心思想是:将原有的内存一分为二,每次仅仅只是使用其中的一块内存。其中复制算法回收内存分几步:第一步把所有的正在使用的对象复制到未被使用的内存中。第二步把正在使用的内存全部清空。第三步交换内存角色,完成垃圾回收。

此算法的缺点是,复制算法首先要折损一半内存,还有就是当存活对象远远多于回收对象时,此算法效率相比之下就非常低了。但是此算法优势是回收内存以后,不会存在内存碎片。

 

Java的新生代串行垃圾回收器中,使用了复制算法的思想。新生代中首先会有大量经常被回收的内存,新生代又分为Eden区,from区,to区。其中from区、to区被称为survivor区(幸存者空间),用于存放未被回收对象。另外介绍一下from区跟to区两块内存空间大小相等,地位相等,可进行角色互换的空间块。

 

上图所示复制算法是适用于新生代回收机制的,效果比较好。(新生代是回收对象多于存活对象)

 

标记压缩法

上述复制算法的有个弊端是损耗一倍内存作为替补区,标记压缩算法把此算法进行优化了一下。标记压缩算法在老年代回收使用比较多,跟标记算法一样,也是从对象的跟节点进行标记,但是之后并不是简单的清除对象。而是把可存活对象移动到内存一端,并且保存引用关系。最后清理掉所有边界外边的对象。这样类似在标记算法做完以后重新做一次内存整理。

 

 

 

 

 

 

 

 

 

这篇关于浅谈gc-垃圾回收的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140920

相关文章

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

离心萃取机废旧磷酸铁锂电池回收工艺流程

在废旧磷酸铁锂电池的回收工艺流程中,离心萃取机主要应用于萃取除杂的步骤,以提高回收过程中有价金属(如锂)的纯度。以下是结合离心萃取机应用的废旧磷酸铁锂电池回收工艺流程: 电池拆解与预处理 拆解:将废旧磷酸铁锂电池进行拆解,分离出电池壳、正负极片、隔膜等部分。破碎与筛分:将正负极片进行破碎处理,并通过筛分将不同粒径的物料分开,以便后续处理。 浸出与溶解 浸出:采用适当的浸出工艺(如二段式逆

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

HotSpot虚拟机的经典垃圾收集器

读《深入理解Java虚拟机》第三版笔记。 关系 Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old(MSC)、Concurrent Mark Sweep (CMS)、Garbage First(G1)收集器。 如图: 1、Serial 和 Serial Old 收集器 2、ParNew 收集器 3、Parallel Sc

浅谈PHP5中垃圾回收算法(Garbage Collection)的演化

前言 PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写PHP或Zend扩展除外),这就意味着PHP本身实现了垃圾回收机制(Garbage Collection)。现在如果去PHP官方网站(php.net)可以看到,目前PHP5的两个分支版本PHP5.2和PHP5.3是分别更新的,这是因为许多项目仍然使用5.2版本的PHP,而5.3版本对5.2并不是完

Java虚拟机垃圾回收的几个关键问题

20151008 GC的几个关键问题,触发条件,触发的机制 主线是数据的移动,从什么位置到什么位置,移动的条件是什么? 1 垃圾收集在什么时候触发? GC都是在带满了的时候触发的,每次触发都是把不会用的不可达的对象空间回收了,留下还在用的对象。 1) MinorGC的触发是伊甸园空间满的时候 2) FullGC的触发是在老年代满的时候 2 垃圾回收的时候做哪些工作? 1) 一个新的对象new出

浅谈java向上转型和乡下转型

首先学习每一种知识都需要弄明白这知识是用来干什么使用的 简单理解:当对象被创建时,它可以被传递给这些方法中的任何一个,这意味着它依次被向上转型为每一个接口,由于java中这个设计接口的模式,使得这项工作不需要程序员付出任何特别的努力。 向上转型的作用:1、为了能够向上转型为多个基类型(由此而带来的灵活性) 2、使用接口的第二个原因却是与使用抽象基类相同,防止客户端创建该类的对象,并确保这仅仅

【前端安全】浅谈XSS攻击和防范

定义 XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 分类 大分类小分类原理非存储DOM型① 不需要经过服务器

水面垃圾检测数据集 3000张 水面垃圾 带标注 voc yolo

数据集概述 该数据集包含3000张图像,专注于水面垃圾的检测。数据集已经按照VOC(Visual Object Classes)和YOLO(You Only Look Once)两种格式进行了标注,适用于训练深度学习模型,特别是物体检测模型,用于识别水面上的各种垃圾。 数据集特点 多样性:包含3000张图像,涵盖了多种类型的水面垃圾,确保模型能够识别各种类型的垃圾。双标注格式:提供VO