当前位置: 首页 > news >正文

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(方法)等。

http://www.lryc.cn/news/156405.html

相关文章:

  • 数据库的三个范式
  • 谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行
  • Java EE 突击 15 - Spring Boot 统一功能处理
  • JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白
  • Python 及 Pycharm 的安装 2023.8
  • java中的线程中断
  • 【跟小嘉学 Rust 编程】二十三、Cargo 使用指南
  • R Removing package报错(as ‘lib’ is unspecified)
  • 金融信创,软件规划需关注自主安全及生态建设
  • 无重叠区间【贪心算法】
  • nlp系列(7)实体识别(Bert)pytorch
  • Uniapp学习之从零开始写一个简单的小程序demo(新建页面,通过导航切换页面,发送请求)
  • uniapp微信小程序隐私保护引导新规
  • 超图嵌入论文阅读2:超图神经网络
  • 安全运营中心(SOC)技术框架
  • 并行和并发的区别
  • GPT转换工具:轻松将MBR转换为GPT磁盘
  • 大模型参数高效微调技术原理综述(二)-BitFit、Prefix Tuning、Prompt Tuning
  • 将conda环境打包成docker步骤
  • C# 获取Json对象中指定属性的值
  • 【LeetCode】202. 快乐数 - hash表 / 快慢指针
  • 什么是多态性?如何在面向对象编程中实现多态性?
  • 【目标检测】理论篇(3)YOLOv5实现
  • IDEA爪哇操作数据库
  • 一文速学-让神经网络不再神秘,一天速学神经网络基础(七)-基于误差的反向传播
  • C++ 异常处理——学习记录007
  • 【BIM+GIS】“BIM+”是什么? “BIM+”技术详解
  • Flink算子如何限流
  • 垃圾分代收集的过程是怎样的?
  • NPM 常用命令(四)