JVM:组成、垃圾回收器、垃圾回收算法、常见命令

JVM——垃圾回收器 会导致STW,G1中可以通过参数-XX:MaxGCpauseMillis=n (默认是200)设置每次垃圾回收是的最大暂停时间毫秒数,G1垃圾回收器会尽可能地保证暂停的时间。吞吐量 = CPU在用户应用程序运行的时间 / (CPU在用户应用程序运行的时间 + CPU垃圾回收的时间)Parallel Scavenge是JDK8默认的年轻代垃圾回收器,多线程并行回收,关。由于垃圾回收器分为年轻代和老年代,除了G1之外的其他垃圾回收器必须成组合进行使用。新生代使用ParNew回收器,老年代使用串行回收器。 阅读详情

一、JVM 核心组成

JVM 主要由以下四部分组成,协同管理内存、执行字节码和资源回收:

1. 类加载子系统(Class Loader Subsystem)
  • 作用:加载 .class 文件到内存,生成 Class 对象。
  • 关键流程:
    加载
    验证
    准备
    解析
    初始化
  • 双亲委派模型:
    • 层级:Bootstrap → Extension → Application → 自定义类加载器
    • 原则:优先由父加载器加载,避免核心类被篡改。
2. 运行时数据区(Runtime Data Areas)
区域作用线程共享性异常
堆(Heap)存储对象实例和数组,GC 主战场共享OutOfMemoryError
方法区(Metaspace)存储类元数据(JDK8+ 使用本地内存)共享Metaspace OOM
虚拟机栈(JVM Stack)存储栈帧(局部变量表、操作数栈、方法出口等)线程私有StackOverflowError
本地方法栈为 Native 方法(如 C/C++ 代码)服务线程私有StackOverflowError
程序计数器(PC)记录当前线程执行的位置(唯一无 OOM 的区域)线程私有无
3. 执行引擎(Execution Engine)
  • 解释器:逐行解释字节码,启动速度快,执行效率低。
  • 即时编译器(JIT):将热点代码编译为机器码(如 C1、C2 编译器),提升执行效率。
  • 垃圾回收器(GC):自动回收堆内存中的无用对象。
4. 本地方法接口(JNI)
  • 提供调用操作系统底层功能(如文件操作、网络通信)的接口。

二、垃圾回收算法与回收器

1. 垃圾回收算法
算法原理优点缺点适用场景
标记-清除标记无用对象后清除实现简单内存碎片化老年代(CMS)
复制算法将存活对象复制到另一块内存无碎片,高效内存利用率低(50%)新生代(Survivor)
标记-整理标记后移动存活对象到一端无碎片,内存紧凑移动成本高老年代(G1、ZGC)
分代收集新生代(复制算法)+ 老年代(标记-整理)针对不同区域优化需组合使用主流 JVM
2. 垃圾回收器对比
收集器算法特点适用场景参数
Serial新生代:复制
老年代:标记-整理
单线程,STW 时间长客户端、小内存-XX:+UseSerialGC
Parallel Scavenge新生代:复制
老年代:标记-整理
多线程,吞吐量优先后台计算型应用-XX:+UseParallelGC
CMS标记-清除并发收集,低停顿响应速度敏感型应用-XX:+UseConcMarkSweepGC
G1标记-整理 + 复制分区化收集,可预测停顿时间大内存、低延迟-XX:+UseG1GC
ZGC染色指针 + 读屏障超低停顿(<10ms),TB 级堆超大内存、极致低延迟-XX:+UseZGC

三、JVM 常用命令与机制

1. 常用诊断命令
命令功能示例
jps查看 Java 进程 PIDjps -l(显示主类全名)
jstat监控 GC、类加载、JIT 编译状态jstat -gcutil PID 1000 5(每 1s 输出一次,共 5 次)
jmap生成堆内存快照(Heap Dump)jmap -dump:live,format=b,file=heap.hprof PID
jstack生成线程快照(排查死锁、线程阻塞)jstack -l PID > thread_dump.txt
jinfo查看/修改 JVM 参数jinfo -flags PID
2. 关键机制与调优参数
  • 内存分配策略:

    • 对象优先在 Eden 区分配:新生代内存不足时触发 Minor GC。
    • 大对象直接进入老年代:通过 -XX:PretenureSizeThreshold 设置阈值。
    • 长期存活对象进入老年代:通过 -XX:MaxTenuringThreshold 设置年龄阈值。
  • GC 调优参数:

    -Xmx4g -Xms4g           # 堆最大/初始内存
    -XX:NewRatio=2          # 老年代:新生代=2:1
    -XX:SurvivorRatio=8     # Eden:Survivor=8:1:1
    -XX:+UseG1GC            # 启用 G1 回收器
    -XX:MaxGCPauseMillis=200 # G1 最大停顿时间目标
    -XX:+PrintGCDetails     # 打印 GC 详细信息
    
3. OOM 排查流程
  1. 确定 OOM 类型:根据错误日志(如 Java heap space、Metaspace)。
  2. 生成 Heap Dump:使用 jmap 或 -XX:+HeapDumpOnOutOfMemoryError。
  3. 分析 Dump 文件:通过 MAT(Memory Analyzer Tool) 或 VisualVM 查找内存泄漏对象。
  4. 定位代码问题:检查静态集合、未关闭资源(如数据库连接)、大对象分配。

四、总结

  • JVM 组成:类加载、运行时数据区、执行引擎、本地方法接口。
  • 垃圾回收器选择:
    • 小内存/客户端:Serial / Parallel。
    • 响应优先:CMS(JDK8)或 G1(JDK11+)。
    • 超大堆:ZGC 。
  • 核心命令:jps、jstat、jmap、jstack。
  • 调优原则:根据业务场景平衡 吞吐量、延迟 和 内存占用。
cmw500 lte非信令测试_WiFi信令测试在研发过程中的作用   1、关于信令测试的故事  2016年的某天,某著名网络产品公司技术负责人致电寻求技术支持:我们的无线路由器遇到了一个困惑:我们某款路由器应用于实际WiFi网络中时,WiFi终端接入非常困难。但是我们使用测试工具检测此路由器,它的所有物理射频指标都非常优异。不知道是为什么?  我来到了测试现场看到:WiFi路由器受控于芯片公司的测试工具,其WiFi发射机指标在非信令测试仪上显示:无论功率、EVM... 阅读详情

相关推荐

无人机机场自动化巡检钢铁厂管廊技术方案

摘要:针对钢厂管廊人工巡检效率低、成本高等问题,提出5G+无人机自主巡检解决方案。该系统由智能机库、5G无人机、AI分析平台等组成,可实现自动起降、实时数据传输、缺陷智能识别等功能。无人机配备四合一云台相机,支持42分钟续航和复杂环境飞行,通过深度学习算法自动生成巡检报告。方案实施后可提升巡检效率3倍以上,降低人工成本和安全风险,实现全天候自动化巡检,为钢厂管廊安全管理提供智能化技术支持。(149字)

gxdhlg的专栏 1685

java jstat 命令笔记

jstat 是JDK自带的一个轻量级小工具,可以用来分析java程序垃圾回收相关信息。 使用方式 jstat -help Usage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] option...

xyw10000 2380

SpringBoot实战(二十八)集成 Collabora Online 实现在线编辑

SpringBoot实战(二十八)集成 Collabora Online 实现在线编辑

ACGkaka的博客 6984

【Java】JVM内存回收

一般这么理解 SafePoint,就是线程只有运行到了 SafePoint 的位置,他的一切状态信息,才是确定的,也只有这个时候,才知道这个线程用了哪些内存,没有用哪些内存;并且,只有线程处于 SafePoint 位置,这时候对 JVM 的堆栈信息进行修改,例如回收某一部分不用的内存,线程才会感知到,之后继续运行,每个线程都有一份自己的内存使用快照,这时候其他线程对于内存使用的修改,线程就不知道了,只有再进行到 SafePoint 的时候,才会感知。要保证用户线程能继续执行,前提的它运行的资源不受影响嘛。

雨下一整晚real的博客 1955

基于fMRI数据计算脑脊液(CSF)与全脑BOLD信号的时间耦合分析

BOLD和CSF信号有多相似CSF信号要延迟多少时间才能最匹配BOLD信号BOLD-CSF的互相关公式lag:时间延迟采样点数BOLD信号CSF信号延迟时间点对应的相关系数。

Rose9614的博客 2981

AI赋能数字人:打造与语音节奏完美匹配的高质量手势动画

想象一个场景:当你与一位数字人交谈时,它不仅能理解你的言语,还能恰到好处地挥动手臂、比划手势,就像真实的人类交流一样自然流畅。这正是当前AI技术致力于实现的目标——通过分析语音内容,自动生成与之相匹配的手势动作,为数字人赋予更加丰富的情感表达和非言语沟通能力。AI手势生成技术的出现,标志着数字人在模仿人类自然交流方式上迈出了重要一步。随着技术的不断成熟与应用场景的拓宽,未来我们可以期待更多富有表现力和情感互动的数字人出现在我们的日常生活中,开启人机交互的新篇章。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 792

7、JVM垃圾回收器实战

待实现 jvm默认垃圾回收机查看,各类垃圾回收器算法原理,各类垃圾回收器实用场景,垃圾回收器缺点,jvm各区数据结构实现,jvm在java所在的层次

爱欧米 2169

YOLOv11改进 | 细节涨点篇 | DySample一种最新的轻量化动态上采样算子(效果完爆CARAFE)

本文给大家带来的最新改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外,DySample在包括语义分割、目标检测、实例分割、全景分割和单目深度估计在内的五个预测任务中,性能均优于其他上采样器(截至目前最有效的上采样算子),

Snu77的博客 4210

JVM必知必会(三)【内存回收简介,内存分析命令】

内存回收简介Sun的JVM GC(垃圾回收)原理:把对象分为:年轻代(Young)、年老代(Tenured)、持久代(Perm),对不同生命周期的对象使用不同的算法。(基于对对象生命周期分析) Young(年轻代) 年轻代分三个区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor

极客神殿 1130

get_ccopt系列命令介绍

get_ccopt_property:用来获取cts阶段,clock tree上所有的参数信息,可以通过get_ccopt_property –help *获取所有参数。get_ccopt_skew_group_delay:用来获取skew group的相关信息,可以通过筛选出特定条件下skew_group的参数,如skew_group下latency最长是多少;get_ccopt_clock_tree_source_groups:获取clock tree的source group名字;

芯冰乐 281

第55篇:数据隐私保护技术盘点——差分隐私、同态加密与它们的坑(踩坑总结)

数据隐私保护是AI工程化中必须严肃对待的课题。差分隐私和同态加密是两把利器,但也都是“重武器”,使用不当反而会伤及自身。差分隐私像“模糊处理”,通过加噪来保证统计安全性,要小心管理隐私预算和效用权衡。同态加密像“保险箱里打算盘”,保证了计算的精确性,但必须承受巨大的性能和工程复杂度代价。我的建议是:从小规模实验开始,先用DP-SGD在MNIST/CIFAR-10等标准数据集上感受噪声与精度的关系;再用TenSEAL等易用的库尝试一个加密逻辑回归,体会密文膨胀和速度延迟。

ai_blue_pm的博客 281

JVM运行内存分配和回收

本文来自网易云社区   作者:吕宗胜 Java语言与C语言相比,最大的特点是编程人员无需过多的关心Java的内存分配和回收,因为所有这一切,Java的虚拟机都帮我们实现了。JVM的内存管理,大大降低了开发人员对内存管理的要求,也不容易出现C语言中的内存泄漏和溢出。但一旦应用内存发生问题,也会导致程序员难以定位。所以对于Java程序员来说认识和了解JVM的内存分配和回收对于代码的编写和应用的优...

weixin_34111790的博客 351

SAP UI5 百科全书的目录

笔者 12 年 SAP UI5 开发岁月中写下的 595 篇 SAP UI5 学习笔记,全部收录到《SAP UI5 百科全书》专栏中去,目录如下。请大家按照自己的学习需要,根据关键字搜索到对应的文章,然后进行学习。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3827

深入JVM:详解G1垃圾回收器原理

本文小豪将带大家认识各类垃圾回收器的基础概念与应用场景,同时重点讲解目前最为流行的G1垃圾回收器的工作原理。G1采用独特的内存管理策略,实现对整个堆空间的垃圾回收,主要将堆内存划分为多个大小相等的区域(称为Region),各个区域根据需要扮演不同的角色。G1垃圾回收器年轻代回收时,采用了三种关键技术,分别是记忆集、卡表和写屏障。

Code豪客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JVM垃圾回收器 七种经典垃圾回收器

垃圾收集器没有在任何规范中进行过多的规定,可以由不同的厂商,不同版本的JVM来实现由于jdk的版本处于高速迭代过程中,因此java发展至今已经衍生了众多的GC版本垃圾回收器分类按线程数分,可分为串行垃圾回收器和并行垃圾回收器按工作模式分,可以分为并发式垃圾回收器和独占式垃圾回收器按碎片处理方式分,可分为压缩式垃圾回收器和非压缩式垃圾回收器按工作的内存空间分,可分为年起代垃圾收集器和老年代垃圾收集器。

climbxu的码农日志 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

说一下 jvm 有哪些垃圾回收器?

一、串行垃圾回收器 在JDK1.3之前,单线程回收器是唯一的选择。它的单线程意义不仅仅是说它只会使用一个CPU或一个手机线程去完成垃圾收集工作。而且它进行垃圾回收的时候,必须暂停其它所有的工作线程(Stop The World,STW),直到它收集完成。它适合Client模式的应用,在单CPU环境下,它效率高效,由于没有线程交互的开销,专心垃圾收集自然可以获得最高的单线程效率。 串行的垃圾收集器有两种,Serial和Serial Old,一般两者搭配使用。 新生代采用Serial,是利用复制算法;..

学Java,找哪吒 1万+

一文看懂:JVM垃圾回收算法、CMS垃圾回收器、G1垃圾回收器

Hello,大家好,我是此林。今天我们来聊一聊 JVM 垃圾回收机制。在C/C++这类没有自动垃圾回收机制的语言中,一个对象如果不再使用,需要手动释放,否则就会出现内存泄漏。内存泄漏指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出。手动回收的方式相对来说回收比较及时,删除代码执行之后对象就被回收了,可以快速释放内存。缺点是对程序员要求比较高,很容易出现创建完对象之后,程序员忘记释放对象。

2401_82540083的博客 2512

JVM——垃圾回收器(GC)详解(一文搞懂垃圾回收器)

JVM——垃圾回收器(GC)详解(一文搞懂垃圾回收器)

xdx_dili的博客 8387

【JVM经典垃圾回收器详解!】

垃圾回收器(GC)是Java虚拟机(JVM)中用于管理内存的重要组件,主要分为串行、并行、并发、独占、压缩和非压缩等类型。评估GC性能的关键指标包括吞吐量、暂停时间、内存占用等。常见的垃圾回收器有Serial、ParNew、Parallel Scavenge、CMS和G1等,它们分别适用于不同的场景和需求。Serial和ParNew适用于单核和多核CPU环境,Parallel Scavenge注重吞吐量,CMS则关注低延迟。GC的选择和配置对应用程序的性能有显著影响,需根据具体需求进行优化。

liwenhua的博客 2003

JVM学习《垃圾回收算法和垃圾回收器》

因此就出现了一种标记-整理算法(Mark-Compact)算法,与标记-整理算法不同的是,在标记可回收的对象后将所有存活的对象压缩到内存的一端,使他们紧凑的排列在一起,然后对端边界以外的内存进行回收。重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录(主要 是处理漏标问题),这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短。垃圾收集时,遍历当前使用的区域,把存活对象复制到另外一个区域中,最后将当前使用的区域的可回收的对象进行回收。

GQ_666的博客 1630

JVM垃圾回收器上篇

有了前面的理论铺垫,接下来我们正式开始学习实际垃圾回收器。

javashitu的博客 1612

JVM的GC算法以及常见垃圾回收器

JVM的GC算法以及常见垃圾回收器

YMY哈的博客 1532

JVM垃圾回收的历史演进:从GC算法到垃圾回收器选择

JVM(Java虚拟机)垃圾回收技术是Java语言的核心特性之一,它通过自动管理内存的分配和释放,减轻了开发人员的负担。本文将详细介绍JVM垃圾回收的历史演进过程,包括GC算法、设计思想、主要解决问题以及垃圾回收器的选择。

码到三十五 1724

java八股-垃圾回收机制-垃圾回收算法,分代回收,垃圾回收器

深入的图文并茂讲解垃圾回收器,垃圾回收算法,分代回收

weixin_46028606的博客 2771

JVM性能参数优化及JVM垃圾回收器和JVM垃圾回收算法

JVM性能参数优化及JVM垃圾回收器和JVM垃圾回收算法 前言介绍:一个项目的完美运行,是离不开jvm的优化的,对于一些有经验的程序员来说,由于每个项目的差异,会根据项目的加载情况,做参数调整以及垃圾回收器的选择,下面介绍了一些参数的优化及垃圾回收器的选择和算法介绍,供自己以后参考 一,Java虚拟机基本结构: 类加载子系统:  负责从文件系统或者网络中加载Class...

lijian12388806的博客 2605

JVM垃圾回收器

例如,在处理大量并发请求时,我们可以采用多线程或多进程的方式,将请求分发到不同的处理单元上,以提高系统的吞吐量和响应速度。例如,在G1回收器中,JVM会根据应用的实际运行情况,动态地调整各代的比例和垃圾回收的时机,以达到全局最优的效果。:Parallel回收器是Serial回收器的多线程版本,它利用多核CPU的优势,提高了垃圾回收的效率。JVM的垃圾回收器从最初的Serial回收器,发展到Parallel回收器、CMS回收器和G1回收器,经历了从单线程到并发与并行的转变。此外,我们还可以通过设置如。

guangzhi0633的专栏 1444

JVM常见的垃圾回收器(详细)

STW是Stop-The-World缩写: 是在垃圾回收算法执⾏过程当中,将JVM内存冻结丶应用程序停顿的⼀种状态。1、在STW 状态下,JAVA的所有线程都是停⽌执⾏的 -> GC线程除外2、一旦Stop-the-world发生,除了GC所需的线程外,其他线程都将停止工作,中断了的线程直到GC任务结束才继续它们的任务。3、STW是不可避免的,垃圾回收算法执⾏一定会出现STW,我们要做的只是减少停顿的时间GC各种算法优化的重点,就是减少STW(暂停),同时这也是JVM调优的重点。

javaeEEse的博客 6624
上一篇: MySQL 锁机制详解
下一篇: JVM:JMM介绍(简单明了版本)
java烤冷面
博客等级 码龄4年 177粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值