被吹爆的JVM笔记,一招教会什么是JVM调优,资深架构师强推!

news2025/4/13 20:26:36

面试经常被问 JVM 如何调优?这个问题该怎么回答?没有实际调优经验怎么办?

一般面试时问JVM调优,主要是因为,这个技术并不是懂了Java就能自然懂的,需要明白一些底层原理,有一些深度。所以比较适合用来查看面试者是不是足够“高级”。

那么面试时,如何回答JVM调优?主要需要你能回答两方面的问题:

  1. 如何观察JVM的运行参数。比如你发现Java程序跑得慢,定期卡顿,OOM挂掉。为了找原因,你必须学会怎么去看JVM到底是怎么运行的。这时需要你了解一些JVM自带的工具命令,比如jps、jstack、jhat,还有比较新的Java自带的JMC图形界面工具。通过他们你可以了解到一个Java进程有多少线程,每个线程什么状态,是不是在等着锁:进程的CPU和内存占用了多少;GC状态怎么样,Full GC频繁不频繁等等;内存中是不是有泄露,哪个地方可能泄漏了等等。
  2. 如何给出方案。你要明白JVM的工作原理,根据运行参数解决你的问题。比如你发现程序启动慢,你可能猜测有可能是代码没写好,就是跑得慢;也许是一开始load资源过大,而heap不大,造成反复Full GC。你必须通过运行参数来印证你的猜想,然后有针对性地去解决那些问题。为此,你需要大致明白多线程的工作原理,Java内存管理,GC的工作原理(串行、CMS和G1)等。

JVM高级特性与最佳实践

目录详解

内容概览

内容概览

第一部分 走近Java

本书的第一部分为后文的研究和讲解建立 了良好的基础。虽然了解Java技术的来龙去脉,以及编译自己的OpenJDK对于读者理解Java虚拟机并不是必须的,但是这些准备过程可以为走近Java技术和Java虚拟机提供良好的引导。

第1章 介绍了Java技术体系过去、现在的情况以及未来的发展趋势,并在实践中介绍了如何自己编译一个OpenJDK 12。

第二部分 自动内存管理

因为程序员把控制内存的权力交给了Java虚拟机,所以可以在编码的时候享受自动内存管理的诸多优势,不过也正因为这个原因,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那排查错误将会成为一项异常艰难的工作。

第2章 介绍了虚拟机中内存是如何划分的,哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。

第3章 介绍了 垃圾收集的算法和HotSpot虚拟机中提供的几款垃圾收集器的特点及运作原理。通过代码实例验证了Java虚拟机中自动内存分配及回收的主要规则。

第4章 介绍了随JDK发布的基础命令行工具与可视化的故障处理工具的使用方法。

第5章 分享了 几个比较有代表性的实际案例,还准备了一个所有开发人员都能"亲身实战”的练习,希望读者能通过实践来获得故障处理和调优的经验。

第三部分 虚拟机执行子系统

执行子系统是虚拟机中必不可少的组成部分,了解了虚拟机如何执行程序,才能更好地理解怎样才能写出优秀的代码。

第6章 讲解了Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法,以实战的方式演示了Class的数据是如何存储和访问的。

第7章 介绍了类加载过程的“加载"“验证” "准备" "解析” 和“初始化"五个阶段中虚拟机分别进行了哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。

第8章 分析了虚拟机在执行代码时,如何找到正确的方法、如何执行方法内的字节码,以及执行代码时涉及的内存结构。

第9章 通过几个类加载及执行子系统的案例,介绍了使用类加载器和处理字节码的一些值得欣赏和借鉴的思路,并通过一个实战练习加深读者对前面理论知识的理解。

第四部分 程序编译与代码优化

Java程序从源码编译成字节码,再从字节码编译成本地机器码的这两个过程,从整体来看其实等同于一个传统编译器所执行的编译前端、后端过程。

第10章 分析了Java语言中泛型、主动装箱拆箱、条件编译等多种语法糖的前因后果,并实战练习了如何使用插入式注解处理器来完成一个检查程序命名规范的编译器插件。

第11章 讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析即时编译的数据和结果,还选择了几种常见的编译器优化技术进行讲解。

第五部分 高效并发

Java语言和虚拟机提供了原生的、完善的多线程支持,使得它天生就适合开发多线程并发的应用程序。不过我们不能期望系统来完成所有与并发相关的处理,了解并发的内幕也是成为一-位高级程序员不可缺少的课程。

第12章 讲解了虚拟机Java内存模型的结构及操作,以及原子性、可见性和有序性在Java内存模型中的体现;介绍了先行发生原则的规则及使用,以及线程在Java语言之中是如何实现的;还提前介绍了目前仍然在实验室状态的Java协程的相关内容。

第13章 介绍了线程安全所涉及的概念和分类、同步实现的方式及虚拟机的底层运作原理,并且介绍了虚拟机实现高效并发所做的一系列锁优化措施。

最后

前不久有朋友面试了阿里,面试官问到:关于Dalvik虚拟机能不能执行class文件
他当时的回答是:不能,但是它执行的是class转换的dex文件。
当面试官继续问:为什么不能执行class文件?
他的回答只有:Dalvik虚拟机内部的优化原因,没能给出正确回答具体的原因。

其实上面分享的这份笔记就有回答:Dakvik并不是一个Java虚拟机,它没有遵循Java虚拟机规范,不能执行Java的class文件,使用的是寄存器架构而不是JVM中常见的栈架构,但是它与Java又有着千丝万缕的关系,它执行的dex文件可以通过class文件转化而来!

需要文中资料完整版学习的小伙伴可以点击下方的名片自取!

 

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

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

相关文章

传奇客户端文件介绍注解教程,GM必备知识

传奇客户端文件介绍注解教程,GM必备知识 很多朋友架设微端,或者说修改传奇版本素材方面的内容的时候对于客户端很懵逼! 尤其是新手朋友他并不知道传奇客户端里面哪个文件是对应什么内容的! 今天我们将这些发出来分享给支持奇速的朋…

高压放大器在IDE压电元件及其在仿生翼中的应用

实验名称:IDE压电元件及其在仿生翼中应用研究 研究方向:仿生学 测试目的: 优化IDE压电元件结构和组分出发,目的是为了获得大驱动位移、综合性能良好的IDE驱动件。着重研究IDE压电元件的力学和电学性能、驱动特性和在仿生翼上的集成…

LVGL学习笔记(一)--- 环境搭建

LVGL全程LittleVGL,是一个轻量化的,开源的,用于嵌入式GUI设计的图形库。并且配合LVGL模拟器,可以在电脑对界面进行编辑显示,测试通过后再移植进嵌入式设备中,可以高效地进行开发。 一.嵌入式设备的移植 L…

企业请体育冠军明星代言,为何要在年前邀请

行业形势好,要把握住消费升级的机会;行业调整时,要抓住结构性增长的机会。实力背书、冠军代言、让品牌成为品类创新,中小型这几个概念与品牌自身的卖点,每一个放在光中小型企业的品牌上都能独当一面,当一款…

C/C++ 内存分布---变量所在哪个内存区域以及变量所占空间大小是多少?

C/C内存区域划分: 变量所在哪个内存区域以及变量所占空间大小是多少? int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const …

基于JavaFX+Mysql实现(PC)足球联赛评分系统【100010048】

一、引言 1. 编写目的 本文档是概要设计文档的组成部分,编写数据库设计文档的目的是:明确数据库的表名、字段名等数据信息,用来指导后期数据库脚本的开发。本文档的读者对象是需求人员、系统设计人员、开发人员、测试人员。 2. ### 术语表 …

GPT3动口,RT-1动手,智能机器人开卷; 代码开源!

机器学习 (ML) 研究的多个子领域(例如计算机视觉和自然语言处理)的最新重大进展是通过一种共享的通用方法实现的,该方法利用大型、多样化的数据集和能够有效吸收所有数据的表达模型。尽管已经有各种尝试将这种方法应于机器人技术,…

绘制雪夜圣诞树并封装为小程序

绘制雪夜圣诞树并封装为小程序 使用turtle绘制一颗雪夜圣诞树,然后封装成exe小程序送给你的朋友吧! PS:只能在windows运行。 转载注明本文链接和作者 先看效果图: 绘制雪夜圣诞树 由于代码有三百多行,我放在下面的两…

Web前端105天-day45-DOM

DOM01 目录 前言 一、DOM 二、DOM树 三、class 总结 前言 DOM01学习开始 一、DOM DOM: Document Object Model 文档 : HTML代码 -- 超文本标记语言对象 : 网页真正显示的是 HTML 转换出来的 对象类型 -- document模型 : 固定的规则 -- 代表把 HTML代码 转 JS对象网页真…

Jmeter(十七):利用jmeter插件收集性能测试结果汇总报告和聚合报告,利用PerfMon插件收集监控服务器资源指标

利用jmeter插件收集性能测试结果 汇总报告(Summary Report ) 用来收集性能测试过程中的请求以及事务各项指标。通过监听器--汇总报告 可以添加该元件。界面如下图所示 汇总报告界面介绍: 所有数据写入一个文件:保存测试结果到本地…

全产业链落实循环减碳实践 宝马在华持续推进绿色转型

作为率先推出“循环减碳”理念的汽车企业,宝马集团将循环经济理念贯彻到产品生命周期的各个阶段,并以“再思考、再精减、再利用、再回收”为指导原则,在产业链上下游不断壮大“循环减碳朋友圈”。“可持续发展是宝马集团的战略支点之一”&…

【爬虫】JS调试解决反爬问题系列1

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

AlibabaP8,耗时182天肝出来1015页分布式全栈手册

前言 到底什么是分布式?这个话题一直以来就在各大平台论坛上被热议。一千个读者里面就有一千个哈姆雷特。官方这边给出的结论是:分布式就是将相同或相关的程序运行在多台计算机上,从而实现特定目标的一种计算方式。而从分布式技术的起源来看…

这可能是2022最全的Java面试八股文!共计1658页,Java技术手册的天花板

前两天有个小伙伴在后台留言,最近的面试越来越难了,尤其是技术面,考察得越来越细,越来越底层,庆幸的是最终顺利找到了工作。 一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识 比如果这样的问题…

mitmproxy 抓包神器-1.环境准备与抓取浏览器请求

前言 常见的抓包工具有fiddler 和 charles, 这些工具都是需要安装本地客户端,python 版的抓包工具可以用 mitmproxy。 mitmproxy 相比Charles、fiddler的优点在于,它可以命令行方式或脚本的方式进行mock 简介 mitmproxy(man-in-the-middle…

阿里云效产品【流水线Flow】企业项目代码一件发布各个云服务器

文章目录前言一、准备项目代码1.默认的项目2.浏览器访问二、使用步骤1.进入工作台2.创建流水线3.代码源4.代码扫描5.单元测试6.代码构建7.主机部署8.部署脚本三、运行测试1.运行流水线2.测试报告3.访问项目总结前言 「流水线」,又名「Flow」,是一款企业…

二、Qt定时器与文本编辑器制作《QT 入门到实战》

学习目标 了解 qt 的 pixmap了解 qt 的 label 如何显示图片了解定时器的开启了解定时器的关闭了解文件如何进行读取了解 QFileDialog 的使用了解了一个文本编辑器的基本编写巩固了 connect 的使用 一、制作一个图片浏览器 1.1 Pixmap 在 Qt 中使用 Label 可以显示文本&…

加密市场的「五维投资法」

一. 投资决策三要素 投资方法纷繁庞杂,但万变不离其宗,影响最终收益的因素,脱不开三个方面:胜率、赔率、仓位,通俗来说: 胜率:这一项投资,赢面有多大?有多大的把握盈利…

毕业设计-基于大数据招聘岗位可视化系统-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

【学习笔记】JDK源码学习之ArrayList(附带面试题)

【学习笔记】JDK源码学习之ArrayList(附带面试题) 引言: 什么是 ArrayList ?它和 List 又有什么关系?两者又有什么区别? 带着以上问题让我们来深入走进 ArrayList 。 1、ArrayList的使用 demo&#xf…