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

JVM 内存回收算法

文章目录

    • JVM 内存回收算法有哪些:
      • 一、分代收集
        • 1.分代收集理论
        • 2.垃圾收集
      • 二、垃圾收集算法
        • 1. 标记-清除算法
        • 2. 复制算法
        • 3. 标记-整理算法

JVM就是Java虚拟机,JVM的内回收对其原理的认识也是很有必要的,当底层的系统出现内存溢出或者内存泄漏对处理系统很有必要的。

JVM 内存回收算法有哪些:

链接: JVM之内存回收算法_jvm内存回收-CSDN博客

一、分代收集

1.分代收集理论

分代收集理论分别是:

  • 弱分代假说,绝大多数对象都是朝生夕死;
  • 强分代假说,熬过越多次垃圾收集过程的对象就越难以消亡;
  • 跨代引用说,跨代引用相对于同代引用来说仅占极少数。

    其中上述前2个假说共同奠定了常用垃圾收集器的一致设计原则:收集器应该将java堆划分不同区域,按照对象的年龄分配到不同区域存储,针对不同区域使用不同回收算法。
    而跨代引用说解决了存活算法效率问题,即 可达性分析算法对于少量跨代引用不去跨代扫描整个区域。而是使用全局数据结构remember set来管理这些少量跨代引用的对象。

2.垃圾收集

   由于分代收集理论常用的垃圾回收器都会将java堆分为多个区域(新时代和老年代),则针对不同区域会有不同的垃圾收集,常见如下:

  • Minor GC 新生代收集,目标只是新生代的垃圾收集;
  • Major GC 老年代收集,目标是老年代的垃圾收集;
  • Full GC 收集整个java堆和方法区的垃圾收集;
  • Mixed GC 收集整个新生代以及部分老年代的垃圾收集,仅G1支持。

二、垃圾收集算法

1. 标记-清除算法

最早出现也是最基础的垃圾收集算法,后续所有的垃圾收集算法都是基于它的,是用于在老年代的垃圾回收算法,常见如CMS垃圾回收器(低延迟)。
算法原理:

  1. 标记,标记出所有需要回收的对象;
  2. 清除,统一回收掉所有标记的对象。

在这里插入图片描述

代价:对大量可回收对象时执行效率低;会产生大量的内存空间碎片。

2. 复制算法

主要是为了解决标记清除算法对大量可回收对象执行效率低的问题,它适合用于新时代收集算法(对象朝生夕死特性)。
算法原理:

  1. 将可用内存按容量划分为大小相等的2块;
  2. 将还存活对象复制到另一个空间上;
  3. 将之前使用过的内存空间一次清理掉

在这里插入图片描述

代价:空间浪费,将可用的空间缩小为原来一半;如果存活对象比较多的或比较大,复制效率就比较低。

3. 标记-整理算法

主要解决标记清除算法内存碎片化的问题,它适合老年代对象回收特性(长期存活对象),如Parallel Old垃圾收集器(吞吐量)。
算法原理:

  1. 标记,标记需要回收对象;
  2. 整理,让存活对象都向内存另一端移动;
  3. 清理,直接清理边界以外的内存.

在这里插入图片描述

代价:收集花费时间相对于标记清除算法会慢一些。

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

相关文章:

  • 11.28~11.29基本二叉树的性质、定义、复习;排序算法;堆
  • 轮播插件Slick.js使用方法详解
  • postgresql pg_hba.conf 配置详解
  • 使用粗糙贴图制作粗纹皮革手提包3D模型
  • Chrome清除特定网站的Cookie,从而让网址能正常运行(例如GPT)
  • history路由解决刷新出现404的问题
  • ubuntu22下使用nvidia 2080T显卡部署pytorch
  • 【Spark基础】-- 理解 Spark shuffle
  • 软件测试入门:静态测试
  • 力扣labuladong一刷day30天二叉树
  • 【云原生-K8s】检查yaml文件安全配置kubesec部署及使用
  • LeetCode力扣每日一题(Java):20、有效的括号
  • 解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
  • 配置Smart Link主备备份示例
  • 03-微服务架构构建之微服务拆分
  • Linus:我休假的时候也会带着电脑,否则会感觉很无聊
  • 快速排序的新用法
  • 利用乔拓云SAAS系统,快速、高效搭建小程序
  • Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版
  • 非常抱歉的通知
  • rust 包模块组织结构
  • 深入浅出:HTTPS单向与双向认证及证书解析20231208
  • 水利安全监测方案——基于RTU200的解决方案
  • 安卓开发学习---kotlin版---笔记(一)
  • 挑选在线客服系统的七大注意事项
  • 剧本杀小程序搭建:打造线上剧本杀新体验
  • 机器学习实战:预测波士顿房价
  • 基于个微机器人的开发
  • 程序员学习方法
  • VUE+THREE.JS 点击模型相机缓入查看模型相关信息