垃圾回收算法没那么难,一文看懂3个gc算法

createh52个月前 (02-25)技术教程33

jvm内存是有限的,每当内存快满的时候,就需要腾出来一些空间存放新创建的对象。

打个比方,这些算法像是图书馆的管理员,在内存中的对象就像书架上的书,图书管理员采用某种方式整理图书,每当顾客买走一些书,图书管理员就要重新整理书架,腾出地方放新书。

java自带了三种算法来实现垃圾回收。

gc之标记清除算法

分为两步

1.标记

根据GC Root(gc root指向的对象都是有用的,即不可回收的,如图中蓝紫色的块是不可回收的),灰色的块没有被指向,这些对象被标记成可以回收的,如图中灰色的方块。

2.清除

将标记后的灰色方块清空,即图中灰色清空,变成白色

gc之标记整理算法

分为两步

1.标记

也是和上边一样,标记需要回收的地址

2.整理

将不可回收的对象存放在一起

gc之复制算法

分为两步

1.标记

标记那些不需要回收的对象(注意,这里是不需要回收的对象)

2.复制

首先说明:堆中新生代分为伊甸园区、幸存者0区(也叫From区)、幸存者1区(也叫To区)。

对象会先存在From区,当触发垃圾回收,From区中的数据会复制到To区,并且,原来的From区,变成现在的To区,原来的To区变成现在的From区

总结:

1.标记清除算法,就像顾客从书架上买走一些书,书架上就空出一个一个空格

2.标记整理算法,就像图书管理员把这些书整理整理放到一起

3.复制算法,就像图书管理员将这些书全都搬到另一个书架上

结尾:欢迎在下方留言,如有问题,必回复,不信你试试(嘻嘻)

相关文章

漫谈:Java GC的那些事(一)_java gc1

前言与C语言不同,Java内存(堆内存)的分配与回收由JVM垃圾收集器自动完成,这个特性深受大家欢迎,能够帮助程序员更好的编写代码,本文以HotSpot虚拟机为例,说一说Java GC的那些事。Jav...

Java中9种常见的CMS GC问题分析与解决(一)

目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少。前车之鉴,后事之师,美团的几位工程师历时一年多的时间,搜集了内部...

BAT面试题,Java GC(垃圾回收机制),一线大厂面试必问

1.什么是GC?GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

Java 垃圾回收机制(GC)详解_java垃圾回收算法几种

1. GC是什么JVM垃圾收集(Java Garbage Collection )GC采用分代收集算法:次数上频繁收集Young区次数上较少收集Old区基本不动Perm区2. GC 算法总体概述JVM...

自从学了深入解析java虚拟机:FullGC和字符串去重后,我无敌了

Full GC在设计G1时会极力避免Full GC(以下简称FGC),但是总有一些特殊情况,如果当前并发回收的速度跟不上对象分配的速度,那么需要G1启动后备方案进行FGC。早期G1的FGC使用单线程的...

JVM成神路之GC分代篇:分代GC器、CMS收集器及YoungGC、FullGC

引言本篇则重点会对于分代收集器的实现进行全面详解,其中会涵盖串行收集器、并行收集器、三色标记、SATB算法、GC执行过程、并发标记、CMS收集器等知识,本篇则偏重于分析GC机制的落地实现,也就是垃圾收...