java 垃圾回收器以及JVM调优方式

news2024/11/15 10:59:21

什么是垃圾:

没有被引用的对象 就是垃圾。

定位的方式

reference count: 引用计数,即在对象上记录着有多少个引用指向它。(循环引用无法解决)
root searching: 根可达算法,根对象包含 线程栈变量,静态变量,常量池,JNI指针。(目前都使用)

常见的算法:

Mark Sweep: 标记清除, (碎片化严重,对象数量的增加会导致效率变低)
copying: 区域划分,两个区域倒,(效率高,但是浪费内存)。
Mark-compact: 标记整理(运行效率高 )
在这里插入图片描述

常见的垃圾回收器

各个java版本默认的垃圾回收器
从Java 1(JDK 1.0)开始到Java 21之间的各个Java版本默认的垃圾回收器经历了一系列的演变。以下是一些主要版本的Java默认垃圾回收器的概述:

版本垃圾回收器
JDK 1.0 - 1.2:这些早期版本的Java并没有提供垃圾回收器的选择,它们使用了一个简单的标记-清除算法。
JDK 1.3:引入了串行垃圾回收器(Serial GC),这是第一个真正意义上的垃圾回收器。
JDK 1.4:引入了并行垃圾回收器(Parallel GC),也称为吞吐量优先的垃圾回收器,它在Server模式下成为默认的垃圾回收器。
JDK 5 :引入了Parallel Scavenge收集器,它与Parallel Old收集器一起使用,成为JDK 5到JDK 7的默认垃圾回收器组合。
JDK 6:继续使用Parallel Scavenge和Parallel Old作为默认垃圾回收器。
JDK 7:默认垃圾回收器仍然是Parallel Scavenge和Parallel Old。
JDK 8:继续使用Parallel Scavenge和Parallel Old作为默认垃圾回收器。引入了G1(Garbage-First)垃圾回收器,在JDK 8中也可以通过参数-XX:+UseG1GC来启用。
JDK 9:G1垃圾回收器成为默认垃圾回收器,适用于大型堆和需要可预测停顿时间的应用。
JDK 10 - 16:继续使用G1作为默认垃圾回收器。
JDK 17:G1垃圾回收器仍然是默认选择,但引入了ZGC(Z Garbage Collector)作为实验性特性。
JDK 21:JDK 21支持多种垃圾回收器,包括G1、Parallel和ZGC。G1继续作为默认垃圾回收器,而ZGC提供了极低的停顿时间,适用于需要非常低停顿时间的应用程序。

各个垃圾回收器的优缺点:

垃圾回收器版本使用地方优缺点
Serial1.3young单线程STW(stop the world) 垃圾回收期 (年轻代 和 老年代 通用) 小内存使用。垃圾清理时要暂停服务器,效率很低。
Serial Old1.3Old单线程STW(stop the world) 垃圾回收期 (年轻代 和 老年代 通用) 小内存使用。垃圾清理时要暂停服务器,效率很低。
ParNew:1.5~1.7youngSTW(stop the world) 工作在年轻代的多线程 它对 Parallel Scavenge进行了增强 和 CMS做配合使用。
CMS1.5~1.7oldconcurrent mark sweep 异步并行的垃圾回收方式。采用的是 incremenetal update 算法存在bug,会存在漏标的情况。 在 1.5 1.6 1.7 之前没有好的并发垃圾回收器,大内存下的无奈选择,所以一直没有成为默认的垃圾回收期。
Parallel Scavenge:1.4~1.8youngSTW(stop the world) 工作在年轻代的多线程
Parallel Old:1.4~1.8oldSTW(stop the world) 工作在年轻代的多线程
G1:1.8以后allSTW(stop the world) 物理不分带,逻辑分代, 内存分成很多小区域,小区域就通过copy 算法来垃圾回收,年轻代和老年代视情况而定
ZGC:1.4~1.8young old不在分代,也不在停顿
shenandosh:12young oldSTW(stop the world) 工作在年轻代的多线程
Epsilon:young old不需要垃圾回收器,用于java程序运行完就收工的,内存直接清0 ,不需要回收

在这里插入图片描述

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

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

相关文章

bootStrap中操作行详情,删除,修改等操作

点击列表某一行的操作按钮,结合swtich case 出发不同操作

【2024算力大会分会 | SPIE出版】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

【2024算力大会分会 | SPIE出版】 2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning CCPCDL往届均已完成EI检索,最快会后4个半月完成! 2024中…

postgresql 11.17 开发环境rpm安装及扩展安装

进入postgresql安装文件rpm所在文件夹 cd /data460/software 执行 yum local install *.rpm 提示缺少啥依赖就对应yum安装 最后有个依赖比较特殊 Requires: llvm-toolset-7-clang > 4.0.1 You could try using --skip-broken to work around the problem 需要安装centos-re…

Spring WebFlux 整合 r2dbc 的增删改查案例

无障碍阅读方法 微信公众号关注:张家的小伙子 回复:10205文章目录 无障碍阅读方法说明准备创建mysql数据库和数据表创建一个maven项目添加项目依赖包创建项目基本目录接口启动类编写编写application配置添加跨域请求配置创建实体-数据表映射类创建Dao操作类编写自己的增删改…

VS code 美化之 代码窗背景图 日志2024/8/2

VS code 美化之 代码窗背景图 先看效果: 参考文档: VSCode设置背景图片的两种方式_vscode代码背景-CSDN博客 用插件那个方法我试了,其只会在右侧 侧边栏目出现背景图,可能是我设置不正确吧 而且安装这个插件之后出现弹窗 vscode安装出现问题什么的提示,删除这个拓展就不会有…

时间价值衰减对期权价格有哪些影响?投资必知!

今天带你了解时间价值衰减对期权价格有哪些影响?投资必知!期权的时间对期权的价格和价值具有重要影响,这是由于期权的特性和市场机制决定的,其实期权的时间价值是会衰减的。 期权的时间价值,指的是潜在的可能性。 比…

TypeScript(switch判断)

1.switch 语法用法 switch是对某个表达式的值做出判断。然后决定程序执行哪一段代码 case语句中指定的每个值必须具有与表达式兼容的类型 语法switch(表达式){ case 值1: ​ 执行语句块1 break; case 值2: ​ 执行语句块3 break; dfault: //如…

CSDN选择:腾讯cdn缓存跟阿里云cdn对比

在如今互联网迅速发展的时代,内容分发网络(CDN)变得越来越重要。而在众多CDN提供商中,腾讯云和阿里云的CDN服务无疑是具代表性的两家。那么,这两家的CDN服务究竟有何差异?哪一家更值得选择呢?今…

Python WSGI服务器库之gunicorn使用详解

概要 在部署 Python Web 应用程序时,选择合适的 WSGI 服务器是关键的一步。Gunicorn(Green Unicorn)是一个高性能、易于使用的 Python WSGI HTTP 服务器,适用于各种应用部署场景。Gunicorn 设计简洁,支持多种工作模式,能够有效地管理和处理大量并发请求。本文将详细介绍…

【Canvas与艺术】八角大楼

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>八角大楼</title><style type"text/css">.cen…

System,InvalidOperationException:未在本地计算机,上注册“Microsoft.ACE,OLEDB.12.0”提供程序。

未在本地计算机,上注册“Microsoft.ACE,OLEDB.12.0”提供程序 问题原因分析解决方案&#xff1a;第一步第二步 问题 本地导入excel没有问题&#xff0c;发布到服务器上出现System,InvalidOperationException:未在本地计算机,上注册“Microsoft.ACE,OLEDB.12.0”提供程序。 原…

tls.go中的流程梳理

文章目录 tls.go中的流程梳理b站博主的 tls 加密过程自己推理的过程(未完待续)发送ClientHello获取ServerHello tls.go中的流程梳理 b站博主的 tls 加密过程 客户端发送ClentHello(tls版本 加密套件 随机数1)服务器发送ServerHello(tls版本 加密套件 随机数2) 这个阶段之后&…

PLM选型指南:如何选择适合自己企业的系统?

导语&#xff1a;在当前的市场竞争中&#xff0c;制造环节的利润逐渐被压缩&#xff0c;企业亟需寻求新的利润增长点来抢占更多市场份额。企业之间的竞争已不再仅仅是产品质量的较量&#xff0c;更是产品创新速度与效率的角逐。由此&#xff0c;研发创新成为企业转型升级的破局…

Swin Transformer和vit

Swin Transformer最为关键的设计在于连续自注意力层间&#xff0c;特征图上的窗划分口实现了半个窗宽的移动。这使得前一层的窗口间可以实现交互和联系&#xff0c;大幅度提升了模型的表达能力。同时在同一窗口内的查询都拥有相同的key序列&#xff0c;使得硬件内存更容易实现大…

【AI冰封挑战】搭档函数计算,“冰”封你的夏日记忆

在 AI 绘画领域&#xff0c;Stable Diffusion、 WebUI、Midjourney 等工具各领风骚&#xff0c;但 ComfyUI 以其独特的自动化工作流机制&#xff0c;自问世以来便迅速崭露头角&#xff0c;成为众多应用开发者和艺术创作者的新宠。它不仅革新了 AI 生图的创作流程&#xff0c;更…

环网自愈型RS485转光纤

一、概述 工业级双环光纤自愈RS485 转 光纤。工业现场总线光通讯中光纤双环网自愈是 一种有效 的高可靠通讯方式 。双环 自愈光 纤 Modem 采用光纤传输技术&#xff0c;专为工业自动化、 SCADA(数据采集及监控)等工业环境的远程数 据通讯而设计&#xff0c;该产品主用实现48…

nvm管理node版本问题处理集合

windows上通过nvm管理node版本&#xff0c;通过nvm安装node&#xff0c;报错了&#xff0c;信息&#xff1a; > Could not retrieve https://nodejs.org/dist/latest/SHASUMS256.txt. Get > https://nodejs.org/dist/latest/SHASUMS256.txt: dial tcp 104.20.23.46:443: …

手把手教你打包Python项目为whl文件

目录 1&#xff0c;打包whl文件作用 2&#xff0c;单个Python文件打包 1、程序目录 2、程序内容 3、打whl包 4、将whl包导入环境 ​编辑 5、查看效果 6、代码验证 3、多个python文件打包 1、程序目录 ​编辑 2、程序内容 3、打whl包 ​编辑 4、将whl包导入环境 …

C# Unity 面向对象补全计划 泛型

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 1.什么是泛型 泛型&#xff08;Generics&#xff09;是C#中的一个强大特性&#xff0c;允许你编写可以适用于多种数据类型的可重用代码&#xff0c;而不需要重复编写…

Canvas实现截图

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>canvas实现截图功能</title><style>.ca…