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

jvm垃圾回收相关的算法

什么是垃圾

JVM主要通过以下几种方式来判断对象是否需要回收:

  1. 引用计数法:JVM通过引用计数器来判断对象的引用数量,当引用数量为0时,表示对象可以被回收。

  2. 可达性分析算法:JVM通过根对象(如栈中的引用、静态变量等)出发,对对象进行可达性分析,判断对象是否可被访问到,如果不可达,则表示对象可以被回收。

  3. 年龄判断:对于分代垃圾回收算法,JVM会根据对象的存活时间来判断对象是否需要回收,存活时间较长的对象会被移到老年代,存活时间较短的对象会被回收。

  4. 标记阶段:在标记-清除、标记-整理等算法中,JVM会通过标记活动对象来判断哪些对象可以被回收。

这些方法结合起来,帮助JVM判断哪些对象可以被回收,从而进行垃圾回收操作。

垃圾回收算法

垃圾回收算法区别
标记-清除算法通过标记所有活动对象,然后清除所有未标记的对象来回收内存。但会产生内存碎片
复制算法将内存分为两块,每次只使用其中一块,当这一块内存满了,就将存活的对象复制到另一块内存中,然后清除当前内存中的所有对象。不会产生内存碎片
标记-整理算法类似于标记-清除算法,但在清除之后会将存活的对象向一端移动,整理出连续的内存空间。减少内存碎片的产生
分代算法将内存分为新生代和老年代,新生代使用复制算法,老年代使用标记-整理算法,根据对象的存活时间来进行不同的垃圾回收处理
并发标记清除算法在标记和清除阶段尽可能与程序并发执行,减少停顿时间

几个主流的垃圾回收器

特征CMSG1ZGC
垃圾回收类型并发标记-清除并发标记-整理并发标记-整理
目标减少停顿时间综合性能和停顿时间低停顿时间和高吞吐量
内存分区以老年代为主将堆划分为多个区域不需要分代,整个堆都是一致的
停顿时间有可能出现较长的停顿时间相对较稳定的停顿时间尽可能短的停顿时间
内存占用中等
适用场景适用于内存较大、应用线程较少的场景适用于大内存、多核处理器的场景适用于需要低延迟和大堆的场景

这些垃圾回收器各有其特点,可以根据具体的应用场景和需求来选择最合适的垃圾回收器。

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

相关文章:

  • 每日coding
  • 软件工程_复习
  • 07GoF之三种工厂模式
  • JAVA面试部分——后端-线程前篇
  • 【小沐学C++】C++ 实现鼠标键盘钩子HOOK
  • 【pycharm】常见问题与解决
  • flask web学习之表单(一)
  • @ControllerAdvice 使用场景
  • 二极管选型怎么选?常用参数要熟练~
  • 【小白专用】C#关于角色权限系统
  • 代码随想录算法训练营
  • 统计学-R语言-3
  • spring动态控制定时任务
  • 3. Mybatis 中SQL 执行原理
  • 第一次在RUST官方论坛上留言发布我的Rust板箱
  • LabVIEW 智能化矿用定向钻机液压系统监测
  • GO数据库操作
  • PyTorch简单理解ChannelShuffle与数据并行技术解析
  • MySQL 8查询语句之查询所有字段、特定字段、去除重复字段、Where判断条件
  • LLaMA-Factory添加adalora
  • 多端多用户万能DIY商城系统源码:自营+多商户入驻商城系统 独立部署 带完整的安装代码包以及搭建教程
  • Qt 6之七:学习资源
  • 解决大模型的幻觉问题:一种全新的视角
  • mysql进阶-重构表
  • Element-ui图片懒加载
  • Linux系统——DNS解析详解
  • 初识Ubuntu
  • Casper Network (CSPR)2024 年愿景:通过投资促进增长
  • 《MySQL系列-InnoDB引擎06》MySQL锁介绍
  • 获取多个PDF文件的内容并保存到excel上