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

jvm垃圾收集算法

简介

由于《分代收集理论》和不同垃圾收集算法,Java堆应该被划分为不同区域,一般至少会把Java堆划分为新生代(Young Generation)老年代(Old Generation)两个区域

垃圾收集器可以只回收其中某一个或者某些部分的区域对应不同的垃圾回收:

“Minor GC”:新生代的垃圾收集

“Major GC”:老年代垃圾收集

“Full GC”:整个Java堆和方法区的垃圾收集

默认的,新生代( Young ) 与老年代( Old ) 的比例的值为 1:2即:新生代( Young ) = 1/3 的堆空间大小。 老年代( Old ) = 2/3 的堆空间大小 ( 该值可以通过参数–XX:NewRatio 来指定)

新生代又划分为一块Eden和两块Survivor(占比新生代的80%、10%、10%)

Java堆内存分配

标记-清除算法

算法分为“标记”和“清除”两个阶段:

“标记”:标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象(标记过程就是对象是否属于垃圾的判定过程

“清除”:回收标记对象

两大缺点

1、执行效率不稳定

如果Java堆中包含大量对象,而且其中大部分是需要被回收的,这时必须进行大量标记和清除的动作,导致标记和清除两个过程的执行效率都随对象数量增长而降低。

2、内存空间的碎片化

标记、清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致当以后在程序运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

标记-复制算法

标记-复制算法常被简称为复制算法,为了解决标记-清除算法面对大量可回收对象时执行效率低的问题。

将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

存在问题

如果内存中多数对象都是存活的,这种算法将会产生大量的内存间复制的开销

但对于多数对象都是可回收的情况,算法需要复制的就是占少数的存活对象,而且每次都是针对整个半区进行内存回收,分配内存时也就不用考虑有空间碎片的复杂情况,只要移动堆顶指针,按顺序分配即可。(实现简单、运行高效)

是将可用内存缩小为了原来的一半,会造成空间浪费

实际上

新生代分为一块较大的Eden空间和两块较小的Survivor空间,每次分配内存只使用Eden和其中一块Survivor

发生垃圾回收时,将Eden和Survivor中仍然存活的对象一次性复制到另外一块Survivor空间上,然后直接清理掉Eden和已用过的那块Survivor空间。

新生代中垃圾回收时,如果有多于10%对象存活,此时一个Survivor空间不足以容纳一次Minor GC之后存活的对象,就需要依赖其他内存区域(实际上大多就是老年代)

标记-整理算法

标记-复制算法在对象存活率较高时就要进行较多的复制操作,效率将会降低。如果不想浪费50%的空间,就需要有额外的空间进行分配担保,以应对被使用的内存中所有对象都100%存活的极端情况,所以在老年代一般不能直接选用这种算法

“标记-整理”(Mark-Compact)算法:

“标记”:标记出所有需要回收的对象

“整理”:让所有存活的对象都向内存空间一端移动,然后直接清理掉边界以外的内存

标记-清除算法与标记-整理算法的本质差异在于前者是一种非移动式的回收算法,而后者是移动式的。

存在问题

移动存活对象,尤其是在老年代这种每次回收都有大量对象存活区域移动存活对象并更新所有引用这些对象的地方是一种极为负重的操作,而且这种对象移动操作必须全程暂停用户应用程序才能进行,像这样的停顿被最初的虚拟机设计者形象地描述为“Stop The World”。

垃圾收集的停顿时间来看,不移动对象停顿时间会更短,甚至可以不需要停顿,但是从整个程序的吞吐量来看,移动对象会更划算。

不移动对象会使得收集器的效率提升一些,但因内存分配和访问相比垃圾收集频率要高得多,这部分的耗时增加,总吞吐量仍然是下降的。

“和稀泥式”解决方案

虚拟机平时多数时间都采用标记-清除算法,暂时容忍内存碎片的存在,直到内存空间的碎片化程度已经大到影响对象分配时,再采用标记-整理算法收集一次,以获得规整的内存空间

CMS收集器面临空间碎片过多时采用的就是这种处理办法。

相关文章:

jvm垃圾收集算法

简介 由于《分代收集理论》和不同垃圾收集算法,Java堆应该被划分为不同区域,一般至少会把Java堆划分为新生代(Young Generation)和老年代(Old Generation)两个区域。 垃圾收集器可以只回收其中某一个或者…...

Arm机密计算架构技术(Armv9 CCA) 白皮书

1. 概述 在本篇文章中,我们将介绍机密计算(Confidential Computing)在现代计算平台中扮演的角色,并解释机密计算的原理。然后我们将说明 Arm 机密计算架构 (Arm CCA) 如何在 Arm 计算平台中实现机密计算。 看完本文后,您将能够: 定义机密计算描述复杂的系统信任链了解R…...

Magisk Delta以及EdXposed工具在逍遥模拟器上安装教程

材料准备: 1,逍遥模拟器 安卓9的镜像 2,EdXpose 的apk以及对应的zip文件 3,riru框架 zip文件 4,magisk delta 的apk文件以及magisk manager的apk文件 放心 这些我都打包放好了,还有已经打包好的逍遥模拟器镜…...

The Reversal Curse: LLMs trained on “A is B“ fail to learn “B is A“

(not an original, only classified as one to avoid cramming reference links) paper: https://owainevans.github.io/reversal_curse.pdf blog with interactions with the authors: Paper: LLMs trained on “A is B” fail to learn “B is A” — LessWrong This is a…...

专栏更新情况:华为流程、产品经理、战略管理、IPD

目录 前言 01 华为流程体系入门课 CSDN学院 02 产品经理进阶课 CSDN学院 03 BLM 战略方法论进阶课 04 IPD 进阶 100 例专栏 作者简介 前言 已上线四大课程专栏更新情况: 01 华为流程体系入门课(视频图文); 02 硬件产品经…...

微软(TTS)文本转语音服务API实现

此博客实现与java实现微软文本转语音(TTS)经验总结_java tts_${简简单单}的博客-CSDN博客之上,首先感谢博客源码的提供,本人在上面添加了一些详细的注释,方便大家跟好的理解和使用,毕竟我已经用原文调试了一…...

防火墙firewalld

title: 防火墙firewalld createTime: 2020-10-29 18:05:52 updateTime: 2020-10-29 18:05:52 categories: linux tags: centos7上的firewalld 的使用 一、firewalld的基本启动关闭命令 启动服务------systemctl start firewalld关闭服务------systemctl stop firewalld查看状…...

SW线光源是真实的(点光源)

点光源在渲染下真实 点光源地板反射是对的...

Vue Router的安装

安装 在我们使用脚手架搭建项目的时候,默认是没有帮我们安装的。需要自己手动进行安装。安装的 Vue-Router 插件时需要注意版本信息,Vue2.0 使用的是 Vue-Router3.x ,而 Vue3.0 使用的是 Vue-Router4.x。 通过命令安装 vue-router3 插件 $…...

ROS架构设计

ROS架构如图所示,可以将其分为三个层次:OS层、中间层和应用层。 1.OS层 ROS并不是一个传统意义上的操作系统,无法像Windows、Linux一样直接运行在计算机硬件之上,而是需要依托于Linux系统。所以在OS层,我们可以直接使…...

JSON.toJSONString() 解析之后 出现“$ref“:“$[x].xxx“

原因:JSON在处理数据时出现了相同数据,JSON自动将相同节点的数据使用引用方式代替。 解决方式: String jsonString JSON.toJSONString(params, SerializerFeature.DisableCircularReferenceDetect); SerializerFeature.DisableCircularRefer…...

2023研究生数学建模E题思路+模型+代码+论文(持续更新中) 出血性脑卒中临床智能诊疗建模

目录 E题思路 出血性脑卒中临床智能诊疗建模 完整思路代码模型论文获取见文末名片 完整思路代码模型论文获取见此 E题思路 出血性脑卒中临床智能诊疗建模 完整思路代码模型论文获取见文末名片 一、 背景介绍 出血性脑卒中指非外伤性脑实质内血管破裂引起的脑出血&#xff0…...

云可观测性安全平台——掌动智能

云可观测性安全平台是一个跨架构、跨平台的可观测性方案,实现对云环境下的细粒度数据可视化,满足安全部门对云内部安全领域的多场景诉求,包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能云可…...

[ruby on rails] postgres sql explain 优化

一、查看执行计划 sql User.all.to_sql # 不会实际执行查询 puts ActiveRecord::Base.connection.explain(sql)# 会实际执行查询,再列出计划 User.all.explain# 会实际执行查询,再列出计划ActiveRecord::Base.connection.execute(EXPLAIN ANALYZE sql…...

YOLOv7改进:GAMAttention注意力机制

1.背景介绍 为了提高各种计算机视觉任务的性能,人们研究了各种注意机制。然而,以往的方法忽略了保留通道和空间方面的信息以增强跨维度交互的重要性。因此,我们提出了一种全局调度机制,通过减少信息缩减和放大全局交互表示来提高深…...

83、SpringBoot --- 下载和安装 MSYS2、 Redis

启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe redis.windows.conf 启动redis客户端: 小黑窗:redis-cli …...

用css画一个半圆弧(以小程序为例)

一、html结构 圆弧的html结构是 两个块级元素嵌套。 <View classNamewrap><View className"inner">{/* 图标下的内容 */}</View></View>二、css样式&#xff1a;原理是两个半圆叠在一起&#xff0c;就是一个半圆弧。那么&#xff0c;如何画一…...

redis介绍

一、简介 Redis 与其他 key - value 缓存产品有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据&#xff0c;同时还提供list&#xff0c;…...

数学建模常用模型

作为数学建模的编程手还掌握一些各类模型常用算法&#xff0c;数学建模评价类模型、分类模型、预测类模型比较常用的方法总结如下&#xff1a; 接下来对这些比较典型的模型进行详细进行介绍说明。 一、评价模型 在数学建模中&#xff0c;评价模型是比较基础的模型之一&#x…...

Linux 基本语句_5_创建静态库|动态库

静态库 创建主函数&#xff1a;main.c 应用函数&#xff1a;add.c、sub.c、mul.c 创建calc.h文件作为头文件 生成可执行文件*.o文件 gcc -c add.c -o add.o ....包装*.o文件为静态库 ar -rc libmymath.a add.o sub.o mul.o编译静态库并指明创建静态库的位置 sudo gcc mai…...

终极免费跨平台方案:3步将知网CAJ论文转换为可编辑PDF的完整指南

终极免费跨平台方案&#xff1a;3步将知网CAJ论文转换为可编辑PDF的完整指南 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换&#xff0c;成功与否&#xff0c;皆是玄学。 项目地址: https://gitc…...

从VGG到ResNet:手把手教你用PyTorch复现DeepLabV2的ASPP模块(附代码)

从VGG到ResNet&#xff1a;手把手教你用PyTorch复现DeepLabV2的ASPP模块&#xff08;附代码&#xff09; 在计算机视觉领域&#xff0c;语义分割一直是极具挑战性的任务之一。不同于简单的图像分类&#xff0c;语义分割需要在像素级别上对图像进行理解和标注&#xff0c;这要求…...

macOS菜单栏终极管理指南:用Ice开源工具打造高效工作空间

macOS菜单栏终极管理指南&#xff1a;用Ice开源工具打造高效工作空间 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 在macOS生态中&#xff0c;菜单栏作为系统交互的核心区域&#xff0c;却常常因为…...

从零搭建Modbus通信测试环境:TCP与串口双模式实战

1. 为什么需要搭建Modbus测试环境&#xff1f; 刚接触工业通信协议时&#xff0c;我最头疼的就是找不到合适的设备做测试。真实PLC动辄上万元&#xff0c;而Modbus作为工业领域最常用的通信协议之一&#xff0c;其实完全可以用软件模拟。搭建本地测试环境的好处很明显&#xff…...

运维实战:ESXi主机物理网卡闪断致部分VM网络中断的排查与应急恢复

1. 故障现象与初步判断 那天凌晨2点15分&#xff0c;值班手机突然响起刺耳的告警声。监控系统显示&#xff0c;ESXi主机上的三台关键业务虚拟机网络连接中断&#xff0c;而其他虚拟机却运行正常。这种部分VM断网的情况立刻引起了我的警觉——这通常意味着问题出在物理层而非虚拟…...

代码转图片怎么实现:代码高亮卡片生成方法

最近在做文章后台时&#xff0c;我遇到一个很实际的问题&#xff1a;编辑器里的代码块虽然能正常显示&#xff0c;但要拿去做分享图、封面图或者文档配图时就不太合适了。 一开始我试过手动截图&#xff0c;但这种方式效率低&#xff0c;而且样式不统一。代码只要改一行&#x…...

Equalizer APO完整教程:免费系统级音频均衡器从入门到精通

Equalizer APO完整教程&#xff1a;免费系统级音频均衡器从入门到精通 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo Equalizer APO是一款功能强大的免费开源系统级音频均衡器软件&#xff0c;能够为W…...

如何一站式破解Widevine DRM加密视频:智能解密工具完全指南

如何一站式破解Widevine DRM加密视频&#xff1a;智能解密工具完全指南 【免费下载链接】video_decrypter Decrypt video from a streaming site with MPEG-DASH Widevine DRM encryption. 项目地址: https://gitcode.com/gh_mirrors/vi/video_decrypter 还在为付费视频…...

嵌入式音频处理框架arduino-audio-tools:从I2S流到网络电台的实战指南

1. 项目概述&#xff1a;一个为嵌入式音频处理而生的瑞士军刀 如果你在玩ESP32、ESP8266或者任何一块Arduino兼容的开发板&#xff0c;并且想在上面搞点音频相关的项目——比如做个网络电台、一个语音助手&#xff0c;或者一个简单的音频效果器——那你大概率绕不开音频数据的采…...

LDO噪声特性分析与测量优化指南

1. LDO噪声特性与测量基础低噪声线性稳压器&#xff08;LDO&#xff09;作为电源管理系统的核心器件&#xff0c;其噪声特性直接影响着精密模拟电路、射频系统和传感器等关键模块的性能表现。与开关电源不同&#xff0c;LDO通过线性调节方式工作&#xff0c;避免了高频开关噪声…...