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。
  • 调优原则:根据业务场景平衡 吞吐量、延迟 和 内存占用。
基于深度学习的柠檬等级检测系统 —— YOLOv8 + UI界面 + 数据集 本项目的目标是构建一个柠檬等级检测系统,通过深度学习模型自动检测柠檬的等级。自动检测柠檬等级:通过图像中的柠檬特征,自动判断其成熟度和质量。实时视频检测:通过摄像头实时监控柠檬的质量等级。用户友好的UI界面:为用户提供简洁直观的操作界面,支持图像上传、实时视频检测等功能。本项目展示了如何基于YOLOv8模型开发一个柠檬等级检测系统,结合PyQt5实现了用户友好的UI界面。通过该系统,用户可以快速上传柠檬图像并自动识别其等级,极大提升了检测效率和准确性。数据集的扩展。 阅读详情

相关推荐

Power Automate Desktop实战:一键自动登录Chrome网站

本文详细介绍了如何使用Power Automate Desktop实现Chrome网站的一键自动登录,提升工作效率。从环境准备、基础配置到高级技巧与异常处理,全面解析自动化登录流程的构建与优化,特别适合需要频繁登录多个系统的用户。

weixin_29231725的博客 467

java jstat 命令笔记

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

xyw10000 2380

SRC漏洞挖掘实战指南:从零入门到月入过万的网络安全副业

网络安全的核心在于识别和修复系统缺陷,其中逻辑漏洞与信息泄露是常见的安全风险。其原理在于应用程序在业务逻辑设计或数据处理过程中存在缺陷,导致未授权访问或敏感数据暴露。掌握这些技术对于构建安全的应用体系至关重要,不仅能有效防范攻击,也为安全研究人员提供了将技术能力变现的合法途径。在漏洞赏金(Bug Bounty)和SRC(安全应急响应中心)等应用场景中,白帽子通过系统化的测试方法,挖掘此类漏洞,既能获得经济回报,又能积累宝贵的实战经验。本文聚焦于逻辑漏洞与信息泄露的实战挖掘技巧,为初学者提供清晰的入门路径和效

weixin_28568819的博客 349

【Java】JVM内存回收

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

雨下一整晚real的博客 1955

electron windows设置镜像地址环境变量报错npm error `ELECTRON_MIRROR` is not a valid npm option

如果你是在使用某个特定的脚本或配置文件,请检查该文件中是否有不正确的配置项,并进行相应的修正。确保你遵循electron的官方安装指南,并且没有包含不必要的或错误的配置选项。如果问题依然存在,可以查看npm的官方文档或者相关社区获取更多帮助。

qq_36158551的博客 3323

一文读懂 SAP BTP Application Router 的 Resource Files:从 xs-app.json 到本地开发的默认设置

本文详解SAP BTP中Application Router的资源文件配置与本地开发实践。核心包括:xs-app.json定义路由规则与安全策略,package.json声明依赖与启动脚本,resources/存放静态资源,default-services.json和local-destinations.json用于本地模拟云服务。文章通过真实案例展示如何配置静态资源直出、反向代理后端服务,并强调本地开发时的注意事项与常见问题解决路径。关键配置均提供示例代码,帮助开发者快速实现业务应用的部署与联调。

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

7、JVM垃圾回收器实战

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

爱欧米 2169

CDD数据库文件制作(三)——服务配置(0x10)

根据诊断调查表进行每一步配置的详细操作,与背后逻辑解释 1.会话切换配置 1.1.根据诊断调查表进行信息提取(0x1001) 1.2.会话转换配置(0x1001) 1.3.根据诊断调查表进行信息提取(0x1002) 1.4.会话转换配置(0x1002) 1.5.根据诊断调查表进行信息提取(0x1003) 1.6.会话转换配置(0x1003) 1.7.会话切换配置完成后效果图 2.安全等级配置信息提取 2.1.安全访问配置(0x1001) 2.2.安全访问配置(0x1002) 2.3.安全访问配置(0x100

LOVE135149的博客 5838

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

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

极客神殿 1130

适航文章汇总:知识体系全面梳理

无论您是行业新手还是经验丰富的专业人士,都可以通过本篇文章快速查找相关资料,提高对适航认证、机载系统、软件及硬件等领域的理解。本部分详细解析ARP 4754A、ARP 4761、DO-178C、DO-254等核心标准,并介绍其在机载系统开发中的应用。介绍FAA、EASA、CCAR等主要航空管理机构的适航规章体系,并说明各类飞行器(如固定翼、旋翼机、无人机等)的适航要求。本部分还探讨硬件设计、验证与确认过程中的挑战。从系统架构设计到机载设备的集成与管理,本部分介绍机载系统的研发体系及适航管理的最佳实践。

qq_41854911的博客 1451

单片机原理及应用知识点汇总(一)

在键闭合稳定时,读取键的状态,并且必须判别;、串行通信的优点是只需一对传送线,成本低,适于远距离通信,缺点是传送速度较低。、并行通信的优点是传送速度高,缺点是所需传送线较多,远距离通信不方便。、串行通信中,为使设备同步工作,需要通信双方有两个共同的要求,一是。系列单片机的指令中,既有带借位的减法指令,又有不带借位的减法指令。、简述在使用普通按键的时候,为什么要进行去抖动处理,如何处理。、在异步通信的帧格式中,数据位是低位在前高位在后的排列方式。、异步通信中,波特率是指每秒传送二进制代码的位数,单位是。

T19900的博客 696

JVM运行内存分配和回收

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

weixin_34111790的博客 351

Pydoll浏览器自动化框架教程

让浏览器自动化回归本质。不再纠缠驱动兼容、不再手动处理验证码、不再因为请求和 UI 分裂而头疼。如果你经常做 Web 自动化、爬虫或者测试,不妨试试 Pydoll。也别忘了给项目点个 ⭐,让作者知道有人喜欢这个工具。👉GitHub 地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 204

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

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

Code豪客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

climbxu的码农日志 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

学Java,找哪吒 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值