深入理解JVM内存管理:从区域划分到优化策略

JVM内存区域划分有哪些?

堆内存:分为新生代和老年代

新生代:临时对象,所有对象最开始都是年轻代,使用完会被回收或转入老年代

老年代:长期存在的对象

进入老年代的情况:

1.新生代垃圾回收超过15次还没有回收掉就转入老年代

2.大对象(-XX:PretenureSizeThreshold参数设置分界,单位字节)直接从新生代进入老年代

3.动态年龄判断 年龄1+年龄2+年龄n的多个年龄对象综合超过了Survivor区域的50%,就会把年龄n以上的对象都放入老年代

4.Eden区存活对象大于Survivor区时直接转移到老年代去

元数据区:内存的永久保存区域,主要存放class和meta(元数据)的信息

线程虚拟机栈:每一次请求都会开一个虚拟机栈

GCOOM的联系和区别?

GC分为Young GC和Full GC

young GC是指进行年轻代的垃圾回收

Full GC是指新生代、老年代、元数据区的所有回收,STW(stop the world)

OOM是在Full GC之后还是内存不足触发的

垃圾回收器和垃圾回收机制有哪些?哪种更好?为什么?

Serial(串行GC)-复制算法,单个GC线程实现

Serial Old(MSC)(串行GC)-标记-整理,单个GC线程实现

JDK1.3.1默认使用,Serial和Serial Old都会暂停所有用户线程,JVM使用-XX:UseSerialGC设置使用,适用于CPU核数<2,物理内存<2G的小型应用程序

Parallel Scavenge(并行回收GC)-复制算法,多线程实现

Parallel Old(并行GC)--标记-整理算法,多线程实现

JDK1.6~1.8默认使用,JVM使用-XX:+UseParallelOldGC设置使用,Parallel Scavenge和Parallel Old都会暂停所有用户线程,吞吐量优先

ParNew(并行GC)-复制,多线程实现

CMS(并发GC)-标记-清除,多线程实现

JVM使用-XX:+UseConcMarkSweepGC设置使用,分为四个阶段初始标记(STW)、并发标记、重新标记(STW)、并发清理,STW时间减少了

G1

回收分为初始标记、并发标记、最终标记、筛选回收

JDK1.9默认使用,相较于CMS和ParNew垃圾回收之后会整合内存空间,减少内存碎片

ZGC

JDK11推出的垃圾回收器,GC停顿可以在10ms内,支持TB级别内存

JVM的核心参数有哪些?

-Xms Java堆内存的最小大小 通常和Xmx设置一样,?

-Xmx Java堆内存的最大大小 一般为操作系统的2/3大小 ?

-Xss 每个线程的栈内存大小 默认1m,一般不进行设置 ?

-Xmn Java堆内存中的新生代大小,扣除新生代剩下的就是老年代的内存大小了 默认新生代占堆大小的1/3 G1下不建议设置会按需扩大和缩小年轻代 ?

-XX:MetaspaceSize 永久代大小 一般设置几百M 通常和-XX:MaxMetaspaceSize设置一样?

-XX:MaxMetaspaceSize 永久代最大大小 程序项目越大需要越大 一般为256M

-XX:+UseG1GC 启用G1垃圾收集器

-XX:SurvivorRatio=8 Eden区的比例,默认为80% 可以不调整

-XX:+PrintGCDetails 打印详细的GC日志

-XX:PretenureSizeThreshold 大对象阀值,单位字节,不建议设置,默认第一次都是进入新生代 ?

-XX:+PrintGCTimeStamps 打印出来每次GC消耗的时间

-Xloggc:gc.log 参数可以设置将gc日志写入一个磁盘文件 ?

-XX:+HeapDumpOnOutOfMemoryError 在OOM的时候自动dump内存快照出来

-XX:HeapDumpPath=path路径 把内存快照放到哪儿去 可以使用MAT工具进行分析 ?

-XX:+DisableExplicitGC 参数的意思就是禁止显式执行GC,不允许你来通过代码触发GC ?

-verbose:gc 加载打印类的详细信息

优化JVM需要优化什么?

目标:

1.尽可能让对象都在新生代里分配和回收

2.尽量别让太多对象频繁进入老年代

3.避免频繁对老年代进行垃圾回收

4.给系统充足的内存大小

5.避免新生代频繁的进行垃圾回收

如何查看JVM内存划分?

查看各个区域大小

找到java程序的pid

jps -v

jstat -gc [PID] 1000 1

jstst -gcutil [PID]

查看默认使用的垃圾回收器

java -XX:+PrintCommandLineFlags -version

如何通过命令观察JVM运行情况?如何监控JVM运行情况?

sudo jstat -gc PID 1000 10 每隔1秒钟更新出来最新的一行jstat统计信息,一共执行10次jstat统计

sudo jstat -gcutil PID

jstat -gccapacity PID 堆内存分析

jstat -gcnew PID 年轻代GC分析,这里的TT和MTT可以看到对象在年轻代存活的年龄和存活的最大年龄

jstat -gcnewcapacity PID 年轻代内存分析

jstat -gcold PID 老年代GC分析

jstat -gcoldcapacity PID 老年代内存分析

jstat -gcmetacapacity PID 元数据区内存分析

jmap -heap PID 查看堆内存使用情况

jmap -histo PID 会按照各种对象占用内存空间的大小降序排列,把占用内存最多的对象放在最上面

jmap -dump:format=b,file=文件名 [服务进程ID] 用jmap命令导出一份线上系统的内存快照

Zabbix采集 + grafana图形化显示工具

MAT 内存分析工具 排查大内存

发生OOM之后如何快速定位问题?

实操JVM引发OOM程序

📎jvm-learn.zip

实践积加生产环境JVM优化

https://jijiaerp.feishu.cn/wiki/wikcnRusgmipVTtOz1F7xtGOtOf

https://jijiaerp.feishu.cn/wiki/wikcngxZRaM7zB0CiJPJvijDRYg

https://jijiaerp.feishu.cn/wiki/wikcnD5Ax5zsN0gm6xOFl1Lrgzd

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

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

相关文章

python ATM实现

代码要求&#xff1a; 详细代码&#xff1a; money 50000000 name input("输入您的姓名 &#xff1a;")#查询功能 def search(show_header):if show_header:print("--------查询余额--------")print(f"{name}&#xff0c;您好&#xff0c;您的余额…

模板方法原理与C++实现

定义 定义一个操作中的算法骨架&#xff08;稳定的&#xff09;&#xff0c;而将一些步骤的实现延迟到子类中&#xff08;变化的&#xff09;。模板方法使得子类可以复用一个算法的结构&#xff0c;而只改变&#xff08;重写&#xff09;这个算法的特定步骤。 C实现 class L…

为ppt中的文字配色

文字的颜色来源于ppt不可删去的图像的颜色 从各类搜索网站中搜索ppt如何配色&#xff0c;有如下几点&#xff1a; 1.可以使用对比色&#xff0c;表示强调。 2.可以使用近似色&#xff0c;使得和谐统一。 3.最好一张ppt中&#xff0c;使用的颜色不超过三种主要颜色。 但我想强调…

【细如狗】记录一次使用MySQL的Binlog进行数据回滚的完整流程

文章目录 1 事情起因2 解决思路3 利用binlog进行数据回滚3.1 确认是否启用Binlog日志3.2 确认是否有binlog文件3.3 找到误操作的时间范围3.4 登录MySQL服务器查找binlog文件3.4.1 查询binlog文件路径3.4.2 找到binlog文件3.4.3 确认误操作被存储在哪一份binlog文件中 3.5 查看二…

嵌入式人工智能(9-基于树莓派4B的DS1302实时时钟RTC)

1、实时时钟&#xff08;Real Time Clock&#xff09; RTC&#xff0c;全称为实时时钟&#xff08;Real Time Clock&#xff09;&#xff0c;是一种能够提供实时时间信息的电子设备。RTC通常包括一个计时器和一个能够记录日期和时间的电池。它可以独立于主控芯片工作&#xff…

N Puzzle (数字推盘游戏)

N Puzzle [数字推盘游戏] 1. 15 Puzzle2. N PuzzleReferences puzzle /ˈpʌzl/&#xff1a;n. 谜&#xff0c;智力游戏&#xff0c;疑问&#xff0c;不解之谜&#xff0c;令人费解的事 vt. 迷惑&#xff0c;使困惑1. 15 Puzzle https://en.wikipedia.org/wiki/15_puzzle The…

【Python脚本】读取execl表格域名到期时间进行筛选通过webhook进行通知

【Python脚本】读取execl表格域名到期时间进行筛选通过webhook进行通知 execl表格示例: import pandas as pd import requestsdf = pd.read_excel(D:\xx\xx\SSL.xlsx, sheet_name=None)webhook_url = "https://open.feishu.cn/open-apis/bot/v2/XXX?"for sheet_na…

高校如何拥抱国产化OS?中南民族大学信息化应用实践

CentOS 已然停服&#xff0c;数量众多的使用 CentOS 的企业以及高校&#xff0c;都面临着系统替换的迫切需求。国产化操作系统候选者众多&#xff0c;如何在兼顾原有系统兼容性的基础上&#xff0c;在国产化操作系统进行整体环境的平稳迁移&#xff0c;成为在选择 CentOS 替换方…

滑动窗口题目

题目描述&#xff1a; 计算两个字符串str1和str2在给定的含有n个元素的字符串数组strs中出现的最短距离。 详细解释&#xff1a; 定义整数变量n&#xff0c;用于存储字符串数组strs的长度。定义一个vector<string>类型的变量strs&#xff0c;用于存储输入的字符串。定义…

昇思25天学习打卡营第18天|RNN实现情感分类

相关知识 情感分类 指输入一段话或句子&#xff0c;返回该段话的正向或复兴的情感分类。 text embedding 指将文本转化成向量的方法。这里的文本指词、句子、文档等文本序列。 词向量化后会将词转为二进制(独热编码)或高维实数向量&#xff0c;句子和文档向量化则将句子或文…

SpringMVC注解全解析:构建高效Web应用的终极指南 (下)

一. 引言 在上篇文章中&#xff0c;我们介绍了几个重要的SpringMVC注解&#xff1a; SpringBootApplication&#xff1a;Spring Boot项目的启动类注解。RequestMapping&#xff1a;用于映射URL到控制器类或方法&#xff0c;支持多种请求方式。RequestParam&#xff1a;用于绑…

科研绘图系列:R语言分割小提琴图(Split-violin)

介绍 分割小提琴图(Split-violin plot)是一种数据可视化工具,它结合了小提琴图(violin plot)和箱线图(box plot)的特点。小提琴图是一种展示数据分布的图形,它通过在箱线图的两侧添加曲线来表示数据的密度分布,曲线的宽度表示数据点的密度。而分割小提琴图则是将小提…

41.ILA IP核集成逻辑分析仪在线调试工具

&#xff08;1&#xff09;逻辑分析仪使用场景&#xff1a; 仿真不全面数据交互存在异步情况板卡互联可靠性问题 (2)ILA使用方法&#xff1a; 使用IP核创建ILA调试环境使用Debug标记创建IP核使用路径标记核位置调试菜单创建ILA测试环境 (3)IP核调用过程&#xff1a; 例化模…

基于ssh的链接异常解决方法

VSCode、PyCharm链接异常 一.可能的原因 1.如果实例的系统盘重置或更换镜像&#xff0c;那么SSH的指纹会发生变化&#xff0c;于是SSH时会报错REMOTE HOST IDENTIFICATION HAS CHANGED 2.如果本地ssh config文件权限不对&#xff0c;会由于ssh时无法写入配置报错&#xff08;…

【BUG】已解决:IndexError: list index out of range

已解决&#xff1a;IndexError: list index out of range 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社区主…

长难句打卡7.15

The trend was naturally most obvious in those areas of science based especially on a mathematical or laboratory training, and can be illustrated in terms of the development of geology in the United Kingdom 这一趋势自然在以数学或实验室训练为基础的科学领域里…

探寻大模型回答9.9和9.11犯错的根本原因

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

养猫新手不会挑智能猫砂盆?2024最新挑选干货分享!

不得不说智能猫砂盆真的帮了我很大的忙&#xff0c;四年以来我陆陆续续养了很多的猫咪&#xff0c;但是因为需要上班&#xff0c;所以有时候也对铲屎的工作有些力不从心&#xff0c;后面听了朋友的建议&#xff0c;去入手了智能猫砂盆&#xff0c;不得不说买智能猫砂盆也非常的…

Java 8的变革:函数式编程和Lambda表达式探索

文章目录 一、函数接口二、Lambda表达式简介三、Lambda表达式外部参数四、Lambda范例五、Runnable Lambda表达式 一、函数接口 函数接口是一个具有单个抽象方法的接口&#xff0c;接口设计主要是为了支持 Lambda 表达式和方法引用&#xff0c;使得 Java 能更方便地实现函数式编…

【排序算法】—— 计数排序

一、简介 计数排序&#xff0c;顾名思义就是记录数据出现的次数进行排序&#xff0c;时间复杂度为O(NK)&#xff0c;空间复杂度为O(N)。只能用于整型&#xff0c;对于比较集中重复率比较高数据更为适用。 二、排序原理 比如对接下来这些数进行排序 arr[11] { 8,6,4,1,6,2,9,…