面试系列 - JVM内存模型和调优详解

经典面试题 之 JVM调优 JVM调优涉及到两个很重要的概念:吞吐量和响应时间。jvm调优主要是针对他们进行调整优化,达到一个理想的目标,根据业务确定目标是吞吐量优先还是响应时间优先。一、调优步骤 调优的前提是熟悉业务场景,先判断出当前业务场景是吞吐量优先还是响应时间优先。调优需要建立在监控之上,由压力测试来判断是否达到业务要求和性能要求。 调优的步骤大致可以分为: 1.熟悉业务场景,了解当前业务系统的要求,是吞吐量优先还是响应时间优先; 2.选择合适的垃圾回收器组合,如果是吞 阅读详情

目录

一、JVM内存模型

1. 程序计数器(Program Counter Register):

2.Java虚拟机栈(Java Virtual Machine Stacks):

3. 本地方法栈(Native Method Stack):

5. 方法区(Method Area):

6. 运行时常量池(Runtime Constant Pool):

7. 直接内存(Direct Memory):

二、垃圾回收期CMS和G1区别

1. 工作原理:

2. 停顿时间:

3. 内存碎片:

4. 适用场景:

三、jvm调优工具使用

1. VisualVM:

2. jconsole:

3. jvisualvm:

4. jmap:

5. jhat:

6. MAT(Memory Analyzer Tool):

7. YourKit:

8. JProfiler:

四、jvm 调优方案

1.调整堆内存大小:

2.选择合适的垃圾收集器:

3.调整新生代和老年代比例:

4.合理配置垃圾收集器参数:

5.监控和分析GC日志:

6.线程管理:

7.使用合适的数据结构和算法:

8.内存泄漏检测:

9. 代码优化:

10.使用性能分析工具:

五、jvm在项目中调优的示例

步骤1:分析性能问题

步骤2:调整堆内存

步骤3:选择合适的垃圾收集器

 步骤4:监控和分析GC日志

步骤5:线程管理

步骤6:代码优化

步骤7:内存泄漏检测

步骤8:测试和监视


JVM(Java Virtual Machine)内存模型定义了Java应用程序在运行时如何管理内存,包括如何分配、回收和使用内存。

一、JVM内存模型

1. 程序计数器(Program Counter Register):
  • 每个线程都有一个程序计数器,它是一个指针,指向当前线程正在执行的字节码指令的位置。
  • 在多线程环境中,程序计数器用于线程切换时的恢复现场。
2.Java虚拟机栈(Java Virtual Machine Stacks):
  • 每个线程都有一个Java虚拟机栈,用于存储局部变量和方法调用的信息。
  • 栈帧包括局部变量表、操作数栈、方法引用等。
  • 当一个方法被调用时,会创建一个栈帧,方法的参数和局部变量被存储在栈帧的局部变量表中。
3. 本地方法栈(Native Method Stack):
  • 本地方法栈类似于Java虚拟机栈,但是用于执行本地方法,即由本地库(通常是用C/C++编写的)提供的方法。
  • 本地方法栈也包含了栈帧,但它用于执行非Java代码。

4. 堆(Heap):

  • 堆是Java虚拟机管理的最大的一块内存区域,用于存储对象实例。
  • 所有线程共享堆,但线程之间不直接访问堆。
  • 堆中的对象由垃圾回收器管理,主要包括新生代和老年代,以及永久代/元空间(Java 8及之前)或元空间(Java 8之后)。

5. 方法区(Method Area):
  • 方法区用于存储类的信息,包括类的结构信息、字段信息、方法信息、静态变量、常量池等。
  • 在Java 8之前,方法区包括永久代,而在Java 8之后,使用元空间代替永久代。
  • 方法区在运行时是只读的,不允许动态创建类或修改类的结构。
6. 运行时常量池(Runtime Constant Pool):
  • 运行时常量池是方法区的一部分,用于存储编译期生成的各种字面量和符号引用。
  • 运行时常量池支持在运行时动态生成新的常量。

7. 直接内存(Direct Memory):
  • 直接内存不是JVM规范中的一部分,但它在Java NIO中被广泛使用,通过ByteBuffer等类来进行操作。
  • 直接内存是通过操作系统的本地I/O来分配和释放的,而不是通过Java虚拟机内存管理。

二、垃圾回收期CMS和G1区别

1. 工作原理:

  • CMS:
    • CMS使用“标记-清除”算法,它分为四个主要阶段:初始标记、并发标记、重新标记和并发清除。
    • 初始标记和重新标记需要停止应用程序的运行,因为它们需要标记根对象和标记已经发生变化的对象。
    • 并发标记和并发清除阶段尽可能并发执行,以最小化停顿时间。
  • G1:
    • G1使用“分代标记整理”算法,它将堆内存划分为多个大小相等或不等的区域,每个区域可以是幸存区、老年区或Humongous区。
    • G1的目标是减少停顿时间,它通过选择具有最多垃圾的区域来进行回收(Garbage First),而不是整个堆。
    • G1使用并发标记来标记存活对象,并使用并发清理来回收垃圾对象,从而减少停顿时间。
2. 停顿时间:

  • CMS:
    • CMS的目标是减少老年代的Full GC停顿时间,因此它通常能够提供较低的Full GC停顿时间。
    • 但CMS在并发标记和清除阶段可能会产生一些较小的停顿。
  • G1:
    • G1的主要目标是提供可预测的停顿时间,不仅针对老年代,还包括新生代。
    • G1通过垃圾回收周期的分布来控制停顿时间,通常在几百毫秒内。
3. 内存碎片:

  • CMS:
    • 由于CMS使用标记-清除算法,可能会导致内存碎片的问题。当分配大对象时,可能需要进行Full GC来进行整理。
  • G1:
    • G1使用复制算法来整理内存,通常不会产生明显的内存碎片问题。
4. 适用场景:

  • CMS:
    • CMS适用于需要短暂停顿时间的应用程序,特别是Web应用等。
    • 不建议在内存分配速度非常快或内存碎片严重的情况下使用CMS。
  • G1:
    • G1适用于需要可预测停顿时间的应用程序,尤其是对于大堆内存。
    • G1在应对内存碎片和大堆情况下表现更好。

总的来说,选择CMS还是G1取决于应用程序的性质和需求。CMS适合对短暂停顿时间要求较高的应用,而G1适合需要可预测停顿时间和大堆内存的应用。在选择之前,最好通过性能测试来确定哪个垃圾收集器适合你的应用程序。此外,Java虚拟机的版本和配置也可能影响选择。

三、jvm调优工具使用

JVM调优工具是用于分

Java工程师必备:JVM原理、内存模型、调优、垃圾回收机制、面试题 在如今这个时间和知识都是碎片化的时代,C站根据C1-C4认证的成长路径,进行知识细化整理,形成系统化的知识图谱。 通过调研一线互联网大厂的招聘JD,小编对标C站能力认证要求,为大家整理了系列技术干货合集,助力小伙伴们顺利进大厂~ 小编根据C4认证的成长路径整理了Java的相关资源,从零基础带你进入Java的世界。 欢迎大家扫描文末二维码,一起学习~ 一、JVM原理 【JVM原理最全、清晰、通俗讲解,五天40小时吐血整理】 【JVM工作原理】 【初探JVM原理与结构】 【JVM原理和. 阅读详情

相关推荐

关于JVM虚拟机调优的20道高级面试题

JVM内存模型是Java虚拟机在执行Java程序时,对内存进行逻辑划分的一种抽象模型。程序计数器:每个线程都有一个独立的程序计数器,用于存储下一条要执行的指令的地址。这样当线程恢复执行时,可以知道从哪里开始执行。虚拟机栈:每个线程也有一个私有的虚拟机栈,用于存储局部变量、操作数栈、动态链接和方法出口等信息。这个栈在方法调用和返回时扮演着重要角色。本地方法栈:与虚拟机栈类似,本地方法栈主要用于支持本地方法的调用。堆:堆是JVM内存模型中最大的一块内存区域,主要用于存储对象实例。

weixin_41312759的博客 3921

你知道哪些JVM性能调优?77道JVM系列面试题总结,彻底弄透JVM各种问题。

最新2020整理收集的一线互联网公司面试真题(都整理成文档),有很多干货,包含netty,spring,线程,spring cloud等详细讲解,也有详细的学习规划图,面试题整理等,我感觉在面试这块讲的非常清楚:获取面试资料只需:点击这里领取!!! 暗号:优快云 1、java中会存在内存泄漏吗,请简单描述。 会。自己实现堆载的数据结构时有可能会出现内存泄露。 2、64 位 JVM 中,int 的长度是多数? Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在.

a3961401的博客 7286

JVM调优面试题

JVM内存模型是Java虚拟机在执行Java程序时,对内存进行逻辑划分的一种抽象模型。它定义了Java代码执行过程中的内存结构,包括程序计数器、虚拟机栈、本地方法栈、堆、方法区等区域。

专业深耕,技术前沿 1150

性能调优经典面试题及答案(后端/JVM/数据库方向)

【代码】性能调优经典面试题及答案(后端/JVM/数据库方向)

liao9416的博客 2317

深入理解JVM内存模型与垃圾回收机制:从原理到实战调优

本文由王文峰撰写,深入探讨了JVM内存模型与垃圾回收机制,旨在帮助Java开发者解决生产环境中的内存管理问题。文章首先解析了JVM内存结构,包括Metaspace、堆内存分代和直接内存分配,接着详细介绍了对象分配与晋升机制,并对比了不同垃圾回收器的适用场景。随后,文章通过源码级解析G1收集器的内存布局、并发标记流程和记忆集优化,并结合电商平台订单系统的调优案例,展示了如何通过JVM参数调整和代码修复解决Full GC问题。最后,文章提供了性能优化进阶技巧,如逃逸分析和Shenandoah收集器的使用,并展望

王大师企业官方博客 1313

【五斗米】JVM调优

JVM是Java虚拟机的简称,它是Java跨平台运行的核心组件。JVM通过将字节码文件(.class)转换为机器码实现"一次编译,到处运行"。其组成包括类加载系统、执行引擎、运行时数据区和本地接口。内存区域分为线程共享的堆(存储对象)和方法区(类信息),以及线程私有的程序计数器、虚拟机栈和本地方法栈。JVM采用分代垃圾回收机制:新生代使用复制算法,老年代采用标记-清除/整理算法。三色标记算法优化了可达性分析过程,减少STW时间。JVM调优主要涉及堆内存设置(-Xms/-Xmx)、选择合适

m0_64210833的博客 1838

如何应对面试官的JVM调优问题

为什么要进行JVM调优 我猜你肯定是为了面试,现在很多公司都会问这个,虽然你工作了N年JVM调优可能都不会接触到,但我觉得还是有考察的必要的。因为很多时候我们考察一个人不光要考察他的硬实力,还要看他有没有持续学习、深入研究的精神,一只咸鱼是不会看JVM调优的。 JVM调优真的有用吗?能解决什么问题? 用肯定是有用的。但是,默认的大部分情况是足够你用的,出了问题应该先从程序找问题,不要让JVM背锅好吗? 如何应对面试官问的JVM调优的问题 我觉得应该很少有面试官会上来就问JVM调优怎么调,毕竟这显得有点奇怪

诺浅的专栏 8730

逆向淘宝x-mini-wua:从加密算法到设备指纹的生成逻辑

本文深入剖析了淘宝风控核心参数x-mini-wua的生成逻辑与加密算法。通过逆向分析,揭示了其作为设备“身份证”的作用,详细拆解了从硬件信息采集、SG_INNER_DATA文件解密、关键参数提取到最终长wua合成的完整技术链条,并探讨了模拟生成与绕过风控的实战思路及注意事项。

year5的博客 1076

3 种 VLA 模型动作表示方案对比:RT-2 离散化 vs π0 流匹配 vs HybridVLA 混合架构

本文深入对比了三种VLA模型动作表示方案:RT-2离散化、π0流匹配和HybridVLA混合架构。分析了各自的技术原理、优势与局限性,并提供了应用场景选择指南,帮助研究者在具身智能领域做出更优的技术选型决策。

weixin_29031161的博客 319

山东大学FPGA课程实验一 加法器设计

电子设计自动化与FPGA设计,实验一 加法器设计

2503_91283667的博客 869

ISCE+Mintpy进行SBASInSAR处理(持续更新)

通过调用pairs_misregistration方法,利用safe_dict中的数据信息,对每对SLC数据进行配准误差的计算和分析,以确定数据之间的精确差异,为后续的时间序列处理提供基础。给定同一地区的两景SAR影像,经过配准之后,对应像元进行共轭相乘得到相位差,并形成干涉图,但是从干涉图中得到的相位差实际上是主值,即在(-π,π)呈周期性变化,为了还原其真实的相位差,必须在主值的基础上加或减整数倍的相位周期2π,把被卷叠的相位展开,才能顺利地反演出地面目标的高程和形变。

Cyy2511250589的博客 3735

Abaqus边界条件设置避坑指南:为什么你的实体单元转动自由度总是不生效?

本文深入解析了Abaqus中实体单元转动自由度设置失效的根本原因。从力学原理与有限元节点自由度的本质区别出发,阐明了实体单元仅具有平动自由度,直接约束其转动自由度是无效操作。文章提供了对称边界条件的正确设置方法,并给出了使用耦合约束等高级方案来模拟真实抗转动约束的实战指南,帮助用户避免常见建模陷阱。

weixin_29290379的博客 621

头歌平台-人工智能导论实验(人脸识别)

答案仅供参考,自己动手丰衣足食!!!

qq_52119136的博客 3026

【产品经理修炼之道】- 优惠券系统从入门到精通(一)

为了满足企业的优惠券业务,优惠券系统一般需要包含哪些功能?这篇文章里,作者从架构、功能等维度做了拆解,一起来看看吧。此部分主要讲解为满足公司优惠券业务,需要优惠券系统必须包含哪些功能,即优惠券架构图。

xiaoli8748的专栏 1809

Serdes之什么是(CDR)?

光收发器和电收发器使用的是我们所说的串行数据通信。在这种通信方式中,数据位是按顺序一个接一个地传输的。光收发器和电收发器使用的是我们所说的串行数据通信。在这种通信方式中,数据位是按顺序一个接一个地传输的。目前市场上大多数收发器都没有专用的时钟输入,因此时钟恢复和数据重新定时等功能是在收发器外部(即在主板上)进行的。接收端则需要恢复时钟以采样串行线上的数据。为了实现这一点,接收端需要一个与输入数据频率大致相同的时钟。通过使参考时钟与输入数据信号的跳变相位对齐,可以生成一个恢复的时钟。这被称为时钟恢复。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 2390

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 面试系列 - Redis使用详解
下一篇: SpringBatch chunk详解
境里婆娑
境里婆娑 新星创作者: Java技术领域 新星创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄10年 1万+粉丝 300原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

境里婆娑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值