面试官问我JVM调优,我忍不住了,哈哈哈哈

JVM 调优系列 1:“精通 JVM 调优,有过 JVM 调优经验”,简历敢写吗?薪资涨 5k 的技巧! 现在除了一些有工作和开发经验的大神,基本很少有人在简历上敢写 “精通 JVM 调优,有过 JVM 调优经验”,因为应聘者如果写这句话就意味着你的面试将会是很 “难过” 的,面试官会变着法的问你如何进行 JVM 系列调优,如果你的基础比较薄弱或者是仅仅背面试题速成,那么你很可能在面试中露馅。JVM 作为 Java 的核心,面试后端开发工程师或者架构师这都是必备的技能。既然 JVM 如此重要,那我就在本系列中完整的过一遍,让你敢于在简历上写 “精通 JVM 调优,有过 JVM 调优经验”,薪资涨 5k!在聊 J 阅读详情

面试官:今天要不来聊聊JVM调优相关的吧?

面试官:你曾经在生产环境下有过调优JVM的经历吗?

候选者:没有

面试官:…

候选者:嗯…是这样的,我们一般优化系统的思路是这样的

候选者:1. 一般来说关系型数据库是先到瓶颈,首先排查是否为数据库的问题

候选者:(这个过程中就需要评估自己建的索引是否合理、是否需要引入分布式缓存、是否需要分库分表等等)

候选者:2. 然后,我们会考虑是否需要扩容(横向和纵向都会考虑)

候选者:(这个过程中我们会怀疑是系统的压力过大或者是系统的硬件能力不足导致系统频繁出现问题)

候选者:3. 接着,应用代码层面上排查并优化

候选者:(扩容是不能无止境的,里头里外都是钱阿。这个过程中我们会审视自己写的代码是否存在资源浪费的问题,又或者是在逻辑上可存在优化的地方,比如说通过并行的方式处理某些请求)

候选者:4. 再接着,JVM层面上排查并优化

候选者:(审视完代码之后,这个过程我们观察JVM是否存在多次GC问题等等)

候选者:5. 最后,网络和操作系统层面排查

候选者:(这个过程查看内存/CPU/网络/硬盘读写指标是否正常等等)

候选者:绝大多数情况下,到第三步就结束了,一般经过「运维团队」给我们设置的JVM和机器上的参数,已经满足绝大多数的需求了。

候选者:之前有过其他团队在「大促」发现接口处理超时的问题,那时候查各种监控怀疑是FULL GC导致的

候选者:第一想法不是说去调节各种JVM参数来进行优化,而是直接加机器

候选者:(用最粗暴的方法,解决问题是最简单的,扩容YYDS)

面试官:确实

候选者:不过,我是学过JVM相关的调优命令和思路的。

候选者:在我的理解下,调优JVM其实就是在「理解」JVM内存结构以及各种垃圾收集器前提下,结合自己的现有的业务来「调整参数」,使自己的应用能够正常稳定运行。

候选者:一般调优JVM我们认为会有几种指标可以参考:『吞吐量』、『停顿时间』和『垃圾回收频率』

候选者:基于这些指标,我们就有可能需要调整:

候选者:1. 内存区域大小以及相关策略(比如整块堆内存占多少、新生代占多少、老年代占多少、Survivor占多少、晋升老年代的条件等等)

候选者:比如(-Xmx:设置堆的最大值、-Xms:设置堆的初始值、-Xmn:表示年轻代的大小、-XX:SurvivorRatio:伊甸区和幸存区的比例等等)

候选者:(按经验来说:IO密集型的可以稍微把「年轻代」空间加大些,因为大多数对象都是在年轻代就会灭亡。内存计算密集型的可以稍微把「老年代」空间加大些,对象存活时间会更长些)

候选者:2. 垃圾回收器(选择合适的垃圾回收器,以及各个垃圾回收器的各种调优参数)

候选者:比如(-XX:+UseG1GC:指定 JVM 使用的垃圾回收器为 G1、-XX:MaxGCPauseMillis:设置目标停顿时间、-XX:InitiatingHeapOccupancyPercent:当整个堆内存使用达到一定比例,全局并发标记阶段 就会被启动等等)

候选者:没错,这些都是因地制宜,具体问题具体分析(前提是得懂JVM的各种基础知识,基础知识都不懂,谈何调优)

候选者:在大多数场景下,JVM 已经能够达到「开箱即用」

面试官:确实

候选者:一般我们是「遇到问题」之后才进行调优的,而遇到问题后需要利用各种的「工具」进行排查

候选者:1. 通过jps命令查看Java进程「基础」信息(进程号、主类)。这个命令很常用的就是用来看当前服务器有多少Java进程在运行,它们的进程号和加载主类是啥

候选者:2. 通过jstat命令查看Java进程「统计类」相关的信息(类加载、编译相关信息统计,各个内存区域GC概况和统计)。这个命令很常用于看GC的情况

候选者:3. 通过jinfo命令来查看和调整Java进程的「运行参数」。

候选者:4. 通过jmap命令来查看Java进程的「内存信息」。这个命令很常用于把JVM内存信息dump到文件,然后再用MAT( Memory Analyzer tool 内存解析工具)把文件进行分析

候选者:5. 通过jstack命令来查看JVM「线程信息」。这个命令用常用语排查死锁相关的问题

候选者:6. 还有近期比较热门的Arthas(阿里开源的诊断工具),涵盖了上面很多命令的功能且自带图形化界面。这也是我这边常用的排查和分析工具

面试官:嗯…好吧。之前聊JVM的时候,你也提到过在「解释」阶段,会有两种方式把字节码信息解释成机器指令码,一个是字节码解释器、一个是即时编译器(JIT)

面试官:我想问问,你了解JVM的JIT优化技术嘛?

候选者:JIT优化技术比较出名的有两种:方法内联和逃逸分析

候选者:所谓方法内联就是把「目标方法」的代码复制到「调用的方法」中,避免发生真实的方法调用

候选者:因为每次方法调用都会生成栈帧(压栈出栈记录方法调用位置等等)会带来一定的性能损耗,所以「方法内联」的优化可以提高一定的性能

候选者:在JVM中也有相关的参数给予我们指定(-XX:MaxFreqInlineSize、-XX:MaxInlineSize)

候选者:而「逃逸分析」则是判断一个对象是否被外部方法引用或外部线程访问的分析技术,如果「没有被引用」,就可以对其进行优化,比如说:

候选者:1. 锁消除(同步忽略):该对象只在方法内部被访问,不会被别的地方引用,那么就一定是线程安全的,可以把锁相关的代码给忽略掉

候选者:2. 栈上分配:该对象只会在方法内部被访问,直接将对象分配在「栈」中(Java默认是将对象分配在「堆」中,是需要通过JVM垃圾回收期进行回收,需要损耗一定的性能,而栈内分配则快很多)

候选者:3. 标量替换/分离对象:当程序真正执行的时候可以不创建这个对象,而直接创建它的成员变量来代替。将对象拆分后,可以分配对象的成员变量在栈或寄存器上,原本的对象就无需分配内存空间了

候选者:不过扯了这么多,不同的JVM版本对JIT的优化都不太相同(:这里也只能算是一个参考

面试官:懂了。

推荐项目

如果想学Java项目的,我还是强烈推荐我的开源项目消息推送平台Austin,可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。

Gitee仓库地址:https://gitee.com/zhongfucheng/austin

GitHub仓库地址:https://github.com/ZhongFuCheng3y/austin

threekingdoms.txt中文三国演义下载及实现人物出场统计 threekingdoms.txt全文下载:https://python123.io/resources/pye/threekingdoms.txt CalThreeKingdomsV1.py: #CalThreeKingdomsV1.py import jieba txt = open("threekingdoms.txt", "r", encoding = "utf-8").read() words = jieba.lcut(txt) counts = {} for word in words: 阅读详情

相关推荐

PC微信逆向) 读取内存联系人链表

首先从一些网络上搜索到的信息可以得出联系人列表是保存在内存里的,并且是全局变量不会被释放,所以我们可以通过搜索某个联系人的信息来定位

Qwertyuiop2016的博客 2918

面试老大难 —— JVM调优到底是个什么东西?

从最熟悉的地方开始 我们先写一个Java类,如图: public class Java3y { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } publi

呼叫冰河谷博客 494

给jetson nano 安装AX200网卡驱动

几经波折,因为在网上看到的基本都是amd版本而非arm版,然后最终选定V5.5是因为更新的几个版本的arm版本是false的(在https://kernel.ubuntu.com/~kernel-ppa/mainline/处选择版本时,得看在arm64上是false还是build succeeded,之前没经验呀刚刚才顿悟的) 1,参考文章https://blog.youkuaiyun.com/MIRANA0/article/details/106696334 学到了得下载如下四个: wget https://k

发嘎嘎的博客 2345

2020年薪30W的Java程序员都要求熟悉JVM与性能调优!

前言 作为Java程序员,你有没有被JVM伤害过?面试的时候是否碰到过对JVM的灵魂拷问? 一、JVM 内存区域划分 1.程序计数器(线程私有) 程序计数器(Program Counter Register),也有称作为 PC 寄存器。保存的是程序当前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址),当 CPU 需要执行指令时,需要从程序计数器中得到当前需要执行的指...

程序员追风的博客 8052

大模型-高通平台性能测试示例-2

在QNN中,可以使用(genis-t2t-run)和这两个工具来进行推理的性能分析。支持在QNX操作系统或Android操作系统上进行性能分析。:提供基本的性能数据,如运行时间、资源消耗等。:提供更详细的性能数据,可能包括各个操作的执行时间、资源使用情况等。:是指在性能分析的同时进行代码质量检查,以发现潜在的问题。:是指跟踪和分析神经网络中各个操作的性能,以优化网络结构或参数。

点滴的岁月 1491

告别安装烦恼!Orange3 3.38.0 Windows绿色版下载即用,附保姆级汉化与组件配置指南

本文详细介绍了Orange3 3.38.0 Windows绿色版的下载与使用,包括中文汉化、组件配置及高效管理技巧。这款无需安装的数据科学工具特别适合快速验证想法的研究人员和移动办公用户,支持多种数据源和可视化工具,大幅提升工作效率。

weixin_30897233的博客 597

JVM 调优 1:“精通 JVM 调优,有过 JVM 调优经验”简历敢写吗?薪资涨 5k 的技巧

现在除了一些有工作和开发经验的大神,基本很少有人在简历上敢写“精通 JVM 调优,有过 JVM 调优经验”,因为应聘者如果写这句话就意味着你的面试将会是很“难过”的,面试官会变着法的问你如何进行 JVM 系列调优,如果你的基础比较薄弱或者是仅仅背面试题速成,那么你很可能在面试中露馅。JVM 作为 Java 的核心,面试后端开发工程师或者架构师这都是必备的技能。既然 JVM 如此重要,那我就在本系列中完整的过一遍,让你敢于在简历上写“精通 JVM 调优,有过 JVM 调优经验”,薪资涨 5k!

白鹿第一帅的 优快云 博客 3635

智能织梦:基于Rokid AR眼镜的家庭情感记忆增强系统设计与实践

本文介绍了基于Rokid AR眼镜的'智能织梦'系统,通过增强现实技术捕捉和重现家庭情感记忆。系统利用多模态传感器和轻量级情感识别模型,自动记录家庭互动中的情感峰值时刻,并生成沉浸式记忆片段。测试数据显示,该系统显著提升了家庭情感互动的频率和质量,特别适用于多代同堂家庭和记忆唤醒场景。

sre5engineer的博客 536

面试官问我JVM调优,我忍不住了

Java学习干货 技术交流 面试官:今天要不来聊聊JVM调优相关的吧? 面试官:你曾经在生产环境下有过调优JVM的经历吗? 候选者:没有 面试官:... 候选者:嗯...是这样的,我们一般优化系统的思路是这样的 候选者:1. 一般来说关系型数据库是先到瓶颈,首先排查是否为数据库的问题 候选者:(这个过程中就需要评估自己建的索引是否合理、是否需要引入分布式缓存、是否需要分库分表等等) 候选者:2. 然后,我们会考虑是否需要扩容(横向和纵向都会考虑) 候选者:(这个过程中我们会怀疑是系统的压

youngpeople_的博客 234

Gemini 2.5 Pro国内免魔法直连教程:5分钟搞定专业级PPT图表(附折线图/柱状图案例)

本文详细介绍了如何利用Gemini 2.5 Pro快速生成专业级PPT图表,包括折线图和柱状图等常见商业图表。通过自然语言交互和智能图表生成功能,用户可以在5分钟内完成数据可视化,大幅提升工作效率。文章还提供了实战案例和高级技巧,帮助用户轻松应对各种商业场景需求。

weixin_30733003的博客 460

ArcGIS Pro符号化教程

本文详细介绍了ArcGIS Pro的软件设置和符号化操作步骤。主要包括:1)设置默认工程目录和关闭地图自动加载;2)创建新工程的基本流程;3)点要素的单一符号化方法,包括样式修改和图层调整;4)图表符号显示过滤器的使用,涉及字段添加、图表类型选择和背景设置。文章还提供了操作截图和数据下载链接,适合GIS初学者学习ArcGIS Pro的基础符号化操作。

WwLK123的博客 548

面了BAT,我总结了他们会问的JVM基础知识

没想到他会这么问

Craig无忌 2616

压缩包密码破解工具ZIP Cracker2.0.1.2 正式版

一款多功能文件密码破解工具,支持ZIP、RAR、Office等主流加密格式,提供CPU/GPU双模式破解。该软件采用黑客风格界面,具备环境自检修复功能,支持实时监控硬件使用率。内置hashcat等专业破解工具,通过拖拽文件即可快速破解,GPU模式速度可达CPU的10-100倍。最新版本优化了中文路径支持,并提升了启动速度。

bfq05234214的博客 480

JVM调优与多线程面试常见问题解析

JVM内存管理和多线程编程是Java开发中的核心概念。JVM通过堆内存分配机制(如TLAB、指针碰撞和空闲列表)来优化对象创建效率,而GC调优则涉及OOM排查和堆转储分析等实战技巧。在多线程场景下,synchronized的锁升级和volatile的内存屏障机制保证了线程安全。这些技术不仅提升了系统性能,还广泛应用于高并发和分布式系统中。本文通过真实面试案例,深入探讨了JVM参数配置、内存屏障原理以及动态代理的实现方式,帮助开发者避免常见的技术陷阱。

weixin_30431445的博客 225

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

极限压测下的JVM调优:老铁用Arthas精准定位内存泄漏

在一次紧张的终面环节中,面试官设置了极限压测场景,QPS飙升至10万,系统频繁触发FullGC,内存泄漏问题日益严重。作为一名应届生,面对P8考官的步步紧逼,他果断使用Arthas工具在线诊断生产问题,成功破解了OOM困局,赢得了考官的认可。

Ared 576

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java面试实战:JUC并发与JVM调优深度解析

并发编程是Java核心技术之一,其核心在于通过线程池、锁机制等工具实现多线程协同。JUC(Java Util Concurrent)包提供了AQS、并发集合等高效工具,结合CAS和volatile等底层原理,可构建高性能并发系统。JVM调优则涉及内存模型、垃圾回收算法等基础概念,通过合理配置堆大小、选择GC策略(如G1)可显著提升系统稳定性。在电商、金融等高并发场景中,线程池参数优化和内存泄漏排查成为关键技能。本文通过HashMap扩容机制、AQS工作原理等面试高频问题,结合缓存穿透防御等实战案例,深入剖析

weixin_32430941的博客 315

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JVM内存泄漏分析的demo

学习Java中的内存泄漏,并用一个小demo进行分析

蒋大钊的博客 381
上一篇: 设计模式这话题,我面试又被问了
下一篇: 面试官问我HTTP,我真的是
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值