JVM----GC(垃圾回收)详解

一、Automatic Garbage Collection(垃圾回收)简介

Automatic Garbage Collection (自动垃圾回收)是JVM的一个特性,JVM会启动相关的线程,该线程会轮训检查heap memeory,并确定哪些是未被引用的(unreferenced),即未被使用的;哪些是被引用的(referenced),即正在使用的。

在C/C++语言中,对象内存的分配与回收,是手动进行分配与回收的,而在JVM中,JVM会使用垃圾回收器(一个线程),来自动对内存进行分配与回收。

二、GC基本机制简介

GC机制中,最常见最基本的方案是标记--清除法(Marking--Deletion),示例如下:

Step 1 : Marking

在垃圾回收机制中第一步通常是标记(Marking) ,该标记用于确认哪些是被引用的,标记哪些是未被引用的。

被引用的对象被标记为蓝色,未被引用的对象被标记为黄色。所有的对象都会被扫描用于做标记,有的时候该操作会非常耗时。

Step 2 :Normal Deletion

该节点会删除未被标记的对象,用于释放内存空间。

Step 2a : Deletion with Compacting

为了进一步提高性能,除了删除未引用的对象外,还可以压缩剩余的引用对象。通过将引用的对象移动到一起,这使得新的内存分配更加容易和快捷。

三、JVM Generations

为了提升JVM的性能,堆(heap memory )被分解为更小的部分或代(generations),即Young Generation, Old or Tenured Generation, and Permanent Generation。示例图如下:

Young Generation是新对象被分配的内存区域,并被标记上年龄值。当Young Generation内存空间被充满,将会触发一次minor garbage collection(触发的条件根据选择的垃圾回收器不同而不同)。minor garbage collection可以通过相关设置值来优化; 如果Young Generation中都是未被使用的对象(dead object),minor garbage collection效率会非常高,垃圾回收会很快。一些幸存的object会被标记年龄值,并最终转移到Old or Tenured Generation(老一代)。

Stop the World Event 每一次minor garbage collection 都会触发"Stop the World Event " 事件,这会导致应用中所有的线程会暂停,知道该垃圾回收操作完成。

Old Generation 会存储长期存活的object,一般的,会给对象的年龄值设置一个临界点,当对象的年龄值达到该临界点的时候,会被移到 Old Generation,最终当 Old Generation内存空间充满的时候会触发一次major garbage collection。

Major garbage collection 也会触发"Stop the World Event " 事件,Major garbage collection会非常慢,因为这涉及所有的 对象。

Permanent Generation 会存储一些JVM运行所需要的元数据,这些元数据描述了classes(类)、methods(方法)等。

相关推荐
Seven9710 分钟前
SpringCloud 常见面试题(一)
java
kong790692818 分钟前
SpringCache缓存
java·spring·缓存
程序猿小蒜21 分钟前
基于springboot的汽车资讯网站开发与实现
java·前端·spring boot·后端·spring
それども22 分钟前
SpringBoot 切面AOP获取注解为null
java·spring boot·spring
vx_bisheyuange24 分钟前
基于SpringBoot的热门旅游推荐系统设计与实现
java·spring boot·后端·毕业设计
代码不停24 分钟前
Java分治算法题目练习(快速/归并排序)
java·数据结构·算法
代码or搬砖25 分钟前
SpringBoot整合SpringMVC
java·spring boot·后端
程序定小飞25 分钟前
基于springboot的汽车资讯网站开发与实现
java·开发语言·spring boot·后端·spring
Kapaseker33 分钟前
Java 26 的新特性
java
糖纸风筝1 小时前
Java指南:eclipse、java-activemq与测试验证
java·开发语言·学习