程序的任何部分不再引用未使用的对象或未引用的对象。所以未引用对象使用的内存可以通过执行垃圾回收来回收。
内存的分配可以在3个基本程序:
-
标记
-
正常缺失
-
紧致删除
标识-识别正在使用的、不是由垃圾收集器使用的内存块的过程,这是第一步。
正常删除-删除未引用对象的过程,将引用对象和指针保留到空闲空间。
使用压缩删除-除了删除未引用的对象,它还将压缩其余的引用对象,方法是将对象移动到一起,以使
新的内存分配更容易,速度更快。
======================================================================
===================================================================
新创建的对象从年轻一代开始。年轻一代也被称为托儿所,因为新的对象开始在这里生活。年轻一代进一步细分为一个伊甸园空间,在那里所有新的对象开始,和两个幸存者空间,其中的对象是从伊甸园移动后幸存一个垃圾收集周期。当对象是从年轻一代收集的垃圾时,这些称为小垃圾收集事件,
所有新的物体首先是在伊甸园空间中创建的。当一个小GC集合达到JVM决定的阈值时,它就会启动。引用对象从伊甸园空间移动到第一个幸存者空间(“伊甸园”和“从”到“)。清除伊甸园空间时,未引用的对象将被删除。
两个幸存者空间(从和到)都是空的。 当一个小GC集合发生时,所有引用的对象都被移动到幸存者空间。 GC结束后,将交换幸存者空格“from”和“to”角色(名称)。S1是上一次垃圾收集(GC)期间的“to”角色。N 现在S1被填充并接受‘From’角色,而S0是空的,并且将接受‘to’角色。
==================================================================
在一个小GC之后,当老化对象达到一定的年龄阈值(默认情况下,现代JVM阈值设置为15个GC周期)时,它们将从年轻一代提升到老一代。长寿的对象最终会从年轻一代移到老一代。当小型GC继续出现时,对象将继续被提升到旧代空间,并且它将开始被填充,并将出现一个主要GC。当对象是从老一代收集的垃圾时,就会发生主要的垃圾收集。
![](https://img-blog.csdni
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
mg.cn/8a5c18bd338745c4ab47bc348180900c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hjdzE5OTcxMDE4,size_16,color_FFFFFF,t_70)
===================================================================
元数据(如类和方法)存储在永久生成中。不再使用的类可能会从永久生成中回收垃圾。在完全垃圾收集事件期间,所有代中未使用的对象都是垃圾收集。