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

createh53周前 (02-25)技术教程10

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 &gt

1. OOM1) 常见OOM异常类型(1) StackOverFlowError栈内存溢出,用于深度方法调用(循环递归);(2) OutOfMemoryError:Java heap space用于变...

大佬带你深入解析java虚拟机:垃圾优先的垃圾回收器(G1 GC)

G1 GCG1 GC是面向服务端应用程序的垃圾回收器,通过新的堆设计和停顿预测模型,可以到达用户指定的一个比较合理的软实时目标。本章将详细分析G1 GC的设计和实现。G1 GC简介 基于Region的...

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

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

JVM成神路之性能调优篇:GC调优、Arthas工具详解及线上最佳配置

引言“在当前的互联网开发模式下,系统访问量日涨、并发暴增、线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代开发过程中炙手可热的名词,无论是在开发、面试过程中,性能优化都是一个常谈常新的话题”。Ja...

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

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

关于Java垃圾回收,你必须要知道FullGC是什么

本文共3198字,是本人前几天面试被提问到的一个问题,将在该文中阐述关于Java垃圾回收——Full GC的相关知识,包括定义、触发条件、具体过程。前几天面试的时候,面试官在最后问了我一个有关Full...