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.hqwc.cn/news/239498.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无脑018——win11部署whisper,语音转文字

1.conda创建环境 conda create -n whisper python3.9 conda activate whisper安装pytorch pip install torch1.8.1cu101 torchvision0.9.1cu101 torchaudio0.8.1 -f https://download.pytorch.org/whl/torch_stable.html安装whisper pip install -U openai-whisper2.准备模型…

服务器和Linux ,安装R rstudio ,常用软件

服务器的基本概念: 如服务器的基本结构,节点,端口的概念等。 服务器的基本设置和管理: 如何配置新服务器, 如何管理服务器,如何分配账户并确保他们互不访问, 如何全局安装软件让所有人都可以…

【深度优先】LeetCode1932:合并多棵二叉搜索树

作者推荐 动态规划LeetCode2552:优化了6版的1324模式 题目 给你 n 个 二叉搜索树的根节点 ,存储在数组 trees 中(下标从 0 开始),对应 n 棵不同的二叉搜索树。trees 中的每棵二叉搜索树 最多有 3 个节点 &#xff0…

树莓派搭建开发环境

背景 自从上次心血来潮给树莓派装完系统,一直没想好怎么具体使用它的场景,它就这样默默地躺在抽屉吃灰了一年 再次想起它,是一个周日的下午:收到之前在腾讯云买的云服务器快过期的提醒,一个4核8G内存的ubuntu&#x…

C/C++11 语法/概念易错总结(1)

文章目录 缺省参数函数重载引用引用和指针内联宏的优缺点auto范围forNULL和nullptr 缺省参数 半缺省参数必须从右往左依次来给出&#xff0c;不能间隔着给 void Func(int a, int b 10, int c 20){cout<<"a "<<a<<endl;cout<<"b &…

数据算法之层次聚类——(待完善)

1.数据挖掘入门笔记——层次聚类 ( 浮光掠影) 2.聚类算法&#xff1a;Hierarchical Clustering层次聚类 3.一文读懂层次聚类&#xff08;Python代码&#xff09; 4.层次聚类 5.聚类分析&#xff08;三&#xff09; 层次聚类及matlab程序 5.聚类算法之层次聚类&#xff08…

【题目】链表相关算法题

文章目录 一. 合并两个有序链表题目解析算法原理代码编写 二. 相交链表问题题目解析算法原理代码编写 三. 环形链表问题1. 判断是否有环2. 计算环的长度3. 找到环的入口点 四. 反转链表方法一&#xff1a;边迭代、边逆置方法二&#xff1a;头插 五. 判断链表是否回文题目解析算…

20231201将RK3399的挖掘机开发板在Andorid12系统下的强制横屏

20231201将RK3399的挖掘机开发板在Andorid12系统下的强制横屏 2023/12/1 22:54 【不完美的地方&#xff1a;修改之后不满屏】 百度&#xff1a;rk3399 android12 横屏 不满屏 Android 显示不满屏 build.prop https://blog.csdn.net/weixin_39966398/article/details/105595184?…

深入了解c语言中的结构体

介绍&#xff1a; 在C语言中&#xff0c;结构体是一种用户自定义的数据类型&#xff0c;它允许我们将不同类型的数据组合在一起&#xff0c;形成一个更为复杂的数据结构。结构体可以用来表示现实世界中的实体&#xff0c;如人员、学生、图书等。本篇博客将介绍结构体的基本概念…

LLM:《第 3 部分》从数学角度评估封闭式LLM的泛化能力

一、说明 在 OpenAI 或 Anthropic 等封闭式大型语言模型 (LLM) 领域&#xff0c;对智能和多功能性的真正考验在于它们处理高特异性查询并在响应中表现出独特性的能力。在这篇博客中&#xff0c;我的目标是提供测试这些模型泛化能力的机制。 封闭式LLM意味着您不知道训练语料库的…

electerm下载和安装

electerm下载和安装 一、概述 electerm 是一款免费开源、基于electron/ssh2/node-pty/xterm/antd/ subx等libs的终端/ssh/sftp客户端(linux, mac, win)。 而且个人觉得electerm界面更好看一些&#xff0c;操作都是类似的。 二、下载安装 下载地址&#xff1a;https://elec…

HarmonyOs 4 (二) HelloWord

目录 一 开发工具下载安装1.1 下载安装包1.2 下载相关依赖 二 开发者注册与个人实名认证三 第一个程序2.1 创建第一个程序2.2 认识开发者界面2.3 目录结构认识2.3.1 父目录认识2.3.2 AppScope 目录2.3.3 entry目录2.3.3.1 ets 目录2.3.3.2 resources目录 2.3.4 认识配置文件2.3…