JVM 垃圾回收

垃圾回收算法

标记-清除算法(Mark and Sweep)

标记-清除算法分为两个阶段。在标记阶段,垃圾收集器会标记所有活动对象;在清除阶段,垃圾收集器会清除所有未标记的对象。标记-清除算法存在的问题是会产生内存碎片,从而影响后续的内存分配。

复制算法(Copying)

复制算法将内存分为两个区域,每次只使用其中一个区域。当一个区域被占满时,垃圾收集器会将所有活动对象复制到另一个区域中,然后清除原区域的所有对象。这种算法可以有效地避免内存碎片的问题,但是需要消耗更多的内存空间。

标记-整理算法(Mark and Compact)

标记-整理算法是在标记-清除算法的基础上进行改进的,它可以避免内存碎片的问题。在标记阶段,垃圾收集器会标记所有活动对象;在整理阶段,垃圾收集器会将所有活动对象移动到内存的一端,然后清除所有未标记的对象。

分代算法(Generational)

分代算法是一种优化算法,它根据对象的生命周期将内存分为不同的代。一般来说,新创建的对象往往比较短命,垃圾收集器会将这些对象放到年轻代中,而长生命周期的对象则会放到老年代中。在垃圾回收时,年轻代采用复制算法,老年代采用标记-整理算法或标记-清除算法。这种算法可以有效地提高垃圾回收的效率。

分区算法(Region-based)

分区算法将内存分为多个区域,每个区域都有自己的垃圾回收器。这种算法可以充分利用多核 CPU 的性能,提高垃圾回收的效率。

引用计数算法

通过为每个对象维护一个引用计数器,记录指向该对象的引用数。当引用计数器为 0 时,该对象可以被清理。
该算法无法处理循环引用的情况,如果对象之间存在相互引用,但没有外部引用指向它们中的任何一个时这些对象无法被销毁。

可达性分析

通过分析对象之间的引用关系,确定哪些对象可以被程序访问,哪些对象已经不再需要并可以被垃圾回收器回收。Java 中使用可达性分析算法来进行垃圾回收,以确保内存被充分利用,同时避免内存泄漏和空间浪费。
可达性分析的过程通常由垃圾回收器自动完成,其基本思路是从一组根对象(如线程栈、静态变量等)开始,递归遍历所有对象,并标记所有可达对象。未标记的对象则被认为是不可达对象,可以被垃圾回收器回收。

垃圾回收器

Serial 垃圾回收器

单线程的垃圾回收器(在多核 CPU 的环境中,如果使用 Serial 垃圾回收器,那么只能使用一个 CPU 核心来执行垃圾回收操作,其他 CPU 核心则处于空闲状态,无法充分利用 CPU 的性能)
使用标记-清除算法进行垃圾回收。
Serial 垃圾回收器适用于内存较小的环境或者只有单个 CPU 核心的环境。

Parallel 垃圾回收器

多线程的垃圾回收器
标记-清除算法进行垃圾回收
适用于多核 CPU 的环境,可以充分利用多核 CPU 的性能。

CMS 垃圾回收器

并发的垃圾回收器,它可以在应用程序运行的同时进行垃圾回收。
适用于对响应时间要求较高的应用程序
可能会产生内存碎片。(由于采用了标记-清除算法,CMS 垃圾回收器无法像复制算法或标记-整理算法那样将内存整理成连续的空间。因此,清除之后,内存中会留下很多不连续的小块空间,这些空间称为内存碎片。)

G1 垃圾回收器(JDK8)

基于分代的垃圾回收器
可以在多核 CPU 的环境下并发执行垃圾回收。
适用于大内存的应用程序
避免内存碎片的问题。

分区:G1 垃圾回收器将整个堆内存分成多个大小相等的区域(Region),每个区域都可以独立地进行垃圾回收操作。这样,在进行垃圾回收时,可以同时并发执行多个区域的垃圾回收操作,从而充分利用多核 CPU 的性能。

并发标记和整理:G1 垃圾回收器采用了一种称为“并发标记和整理(Concurrent Marking and Compacting)”的算法,可以在应用程序运行的同时,对垃圾进行标记和整理。该算法允许垃圾回收器在多个 CPU 核心上并发执行标记和整理操作,从而提高垃圾回收的效率。

ZGC(Z Garbage Collector)垃圾回收器 (JDK 15)

低延迟:ZGC 垃圾回收器可以实现几乎无停顿的垃圾回收,最长的垃圾回收时间不超过几毫秒。这对于对实时性要求较高的应用程序非常重要。

高吞吐量:尽管 ZGC 垃圾回收器的主要目标是低延迟,但它也具有较高的吞吐量,可以处理大量的垃圾数据。

可扩展性:ZGC 垃圾回收器可以处理非常大的堆内存,支持多个 CPU 核心并行执行垃圾回收操作。

分代收集:ZGC 垃圾回收器采用分代收集策略,可以根据对象的生命周期将堆内存分为不同的代,对于不同代采用不同的垃圾回收策略。

内存压缩:ZGC 垃圾回收器可以在垃圾回收过程中对内存进行压缩,从而减少内存的碎片化。

内存碎片

内存碎片会影响后续的内存分配。当应用程序需要分配一块大的连续内存时,由于内存中存在很多小的不连续空间,无法满足分配要求导致内存分配失败。

CMS 垃圾回收器采用 空闲列表(Free List) 机制来维护内存碎片。
空闲列表是一种链表结构,用于记录内存中空闲的小块空间。当应用程序需要分配内存时,CMS 垃圾回收器会遍历空闲列表,找到一块足够大的空间来分配给应用程序。虽然空闲列表可以缓解内存碎片的问题,但是它也会带来额外的开销和复杂性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30106.shtml

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

相关文章

vue 实现粒子特效(vue-particles)

vue 实现粒子特效(vue-particles) npm install vue-particles --savemain.js引入 import VueParticles from vue-particles Vue.use(VueParticles)登录页面使用 login.vue <template><div class"box"><vue-particlescolor"#409EFF":part…

nvm安装以及使用

注意事项&#xff1a; 安装前需要卸载原有的node&#xff0c;卸载干净后cmd输入node -v查看&#xff1b; 一&#xff0c;下载nvm 下载&#xff1a;https://github.com/coreybutler/nvm-windows/releases 选择第四个 “nvm-setup.zip”&#xff1b; 二&#xff0c;安装 1&…

IAR目标代码4字节对齐

向工程添加文件 eof.c : // 文件头 #if defined(__CC_ARM) // MDK // uint32_t g_update_flag[2] __attribute__((zero_init, at(0x1000FFF0)));const unsigned long gc_eof __attribute__((used)) 0xFFFFFFFFul; #elif defined(__ICCARM__) // IAR__root const unsigned…

CSS transform:rotate;无效问题

CSS设置旋转 transform:rotate无效。 今天遇到一个奇怪的问题&#xff0c;CSS给 icon图标设置一个hover 旋转180deg的效果&#xff0c;不生效。 一度任务样式被覆盖了&#xff0c;样式不生效没选中元素的class。但是设置hover改变大小是生效的。奇怪了&#xff1f; 为什么会无…

分布式 - 消息队列Kafka:Kafka生产者发送消息的分区策略

文章目录 1. PartitionInfo 分区源码2. Partitioner 分区器接口源码3. 自定义分区策略4. 轮询策略 RoundRobinPartitioner5. 黏性分区策略 UniformStickyPartitioner6. hash分区策略7. 默认分区策略 DefaultPartitioner 分区的作用就是提供负载均衡的能力&#xff0c;或者说对数…

ArcGIS Pro实践技术应用暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

【香瓜说职场】谈谈如何提高赚到钱的概率(2020.01.05)

一、钱从哪里来&#xff1f; 要想学会赚钱&#xff0c;首先要想明白钱从哪里来&#xff1f; 我们常常听到一句话——客户是上帝。 作为工程师的我们&#xff0c;觉得这句话听起来没毛病&#xff0c;但总隐隐约约觉得客户高不高兴跟我们一毛钱关系都没有&#xff0c;我们照样拿着…

数字化时代,如何做好用户体验与应用性能管理

引言 随着数字化时代的到来&#xff0c;各个行业的应用系统从传统私有化部署逐渐转向公有云、行业云、微服务&#xff0c;这种变迁给运维部门和应用部门均带来了较大的挑战。基于当前企业 IT 运维均为多部门负责&#xff0c;且使用多种运维工具&#xff0c;因此&#xff0c;当…

hacksudo3 通关详解

环境配置 一开始桥接错网卡了 搞了半天 改回来就行了 信息收集 漏洞发现 扫个目录 大概看了一眼没什么有用的信息 然后对着login.php跑了一下弱口令 sqlmap 都没跑出来 那么利用点应该不在这 考虑到之前有过dirsearch字典太小扫不到东西的经历 换个gobuster扫一下 先看看g…

Android界面设计与用户体验

Android界面设计与用户体验 1. 引言 在如今竞争激烈的移动应用市场&#xff0c;提供优秀的用户体验成为了应用开发的关键要素。无论应用功能多么强大&#xff0c;如果用户界面设计不合理&#xff0c;用户体验不佳&#xff0c;很可能会导致用户流失。因此&#xff0c;在Androi…

移动技术相关基本概念

信息网络隔离装置 一种能够保障企业信息网络安全的高级网络设备&#xff0c;主要作用是隔离内外网&#xff0c;阻隔外界攻击&#xff0c;保护企业网络不遭受黑客攻击、木马病毒入侵、信息泄露等安全威胁。同时还能对企业内部的流量进行监视&#xff0c;保护企业敏感数据不被内…

Flink源码之JobManager启动流程

从启动命令flink-daemon.sh中可以看出StandaloneSession入口类为org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint, 从该类的main方法会进入ClusterEntrypoint::runCluster中, 该方法中会创建出主要服务和组件。 StandaloneSessionClusterEntrypoint:…

博客项目(Spring Boot)

1.需求分析 注册功能&#xff08;添加用户操纵&#xff09;登录功能&#xff08;查询操作)我的文章列表页&#xff08;查询我的文章|文章修改|文章详情|文章删除&#xff09;博客编辑页&#xff08;添加文章操作&#xff09;所有人博客列表&#xff08;带分页功能&#xff09;…

FPGA外部触发信号毛刺产生及滤波

1、背景 最近在某个项目中&#xff0c;遇到输入给FPGA管脚的外部触发信号因为有毛刺产生&#xff0c;导致FPGA接收到的外部触发信号数量多于实际值。比如&#xff1a;用某个信号源产生1000个外部触发信号&#xff08;上升沿触发方式&#xff09;给到FPGA输入IO&#xff0c;实际…

冠达管理:股票注册制通俗理解?

目前我国A股商场正在进行股票注册制变革&#xff0c;相较之前的发行准则&#xff0c;股票注册制在理念上更为商场化&#xff0c;这意味着公司发行股票的门槛将下降&#xff0c;公司数量将添加&#xff0c;而股票流通的方式也将有所改变。那么股票注册制指的是什么&#xff0c;它…

centos按用户保存历史执行命令

centos7 按用户记录历史命令的方法 在/etc/profile文件中添加以下代码。 添加完成后执行source /etc/profile 用户重新登录即可发现history被清空了。这时可以去看/usr/share/.history文件夹&#xff0c;该文件夹保存了所有用户每次登录所执行过的的操作记录。 文件路径为 /usr…

使用vscode远程登录以及本地使用的配置(插件推荐)

1、远程登陆ssh 1.1打开vscode插件商店&#xff0c;安装remote-ssh插件 远程ssh添加第三方插件&#xff1a;vscode下链接远程服务器安装插件失败、速度慢等解决方法_vscode远程安装不上扩展_Emphatic的博客-CSDN博客 转到定义&#xff0c;选中代码->鼠标右键->转到定义…

2023/08/05【网络课程总结】

1. 查看git拉取记录 git reflog --dateiso|grep pull2. TCP/IP和OSI七层参考模型 3. DNS域名解析 4. 预检请求OPTIONS 5. 渲染进程的回流(reflow)和重绘(repaint) 6. V8解析JavaScript 7. CDN负载均衡的简单理解 8. 重学Ajax 重学Ajax满神 9. 对于XML的理解 大白话叙述XML是…

JavaScript中的几种常用循环方式对比

JavaScript中的几种循环方式 1. for 循环1.1 使用方式1.2 不支持遍历对象&#xff08;但不会报错&#xff09; 2. for-of 循环2.1 使用方式2.2 for-of 和 for 循环比较&#xff08;不允许修改原数组元素&#xff09;2.2.1 相同点2.2.1.2 都可以遍历数组&#xff0c;但不允许遍历…

灰度非线性变换之c++实现(qt + 不调包)

本章介绍灰度非线性变换&#xff0c;具体内容包括&#xff1a;对数变换、幂次变换、指数变换。他们的共同特点是使用非线性变换关系式进行图像变换。 1.灰度对数变换 变换公式&#xff1a;y a log(1x) / b&#xff0c;其中&#xff0c;a控制曲线的垂直移量&#xff1b;b为正…