JVM的学习总结---《我的Java打怪日记》

简介: 本篇总结分为:初识JVM,JVM的进阶认识,学习JVM的经验总结三部分。

工作中使用Java已有5年的时间,在这期间各种Java开源框架不断更新,每次在学习新技术框架的时候总有种不知从何下手的感觉,后来慢慢地意识到一直重复项目的CRUD对自己的技术能力并没有多少提高,后来逐渐意识到是因为自己的底层知识的原理掌握得不牢固,对于Java研发工程师而言,JVM当然是核心,所以基于此开始了JVM的学习之路。

一、初识JVM
在大学期间通过《Java程序设计语言》这门课,学习了Java语言本身,当时对Java的认知仅限于此,现在看来,当时的技术视野还是过于狭窄。由于JVM本身的抽象性,导致自己当时没有过多关注JVM的底层细节。当时对JVM的认识仅仅停留在宏观的认识,只记住了“Write once,Run anywhere!”,写的Java程序通过JVM可以跨平台运行,至于为什么能做到跨平台,认识尚浅。

二、JVM的进阶认识

真正开始关注JVM是工作两年之后,主要从为什么要JVM调优,如何判断要进行JVM调优,如何调优三个方面进行阐述。
1)为什么要调优
对于用户量、并发量、数据量不是特别大的系统,可能主要关注点在业务逻辑的实现,对系统的性能指标,如:响应时间、QPS、CPU/内存占用率等不会过多地关注,但是对于c端的互联网产品来讲,这些性能指标是至关重要的,一个优化之后的系统可能给公司带来巨大的经济效益。随着移动互联网的兴起,数据量,并发量大幅增加,如果不对系统的性能监控并优化,注定这个系统会出现意想不到的故障,降低用户体验。
不管是Spring/SpringMVC/Hibernate的组合,还是Spring/SpringMVC/Mybatis的组合,甚至是现在的SpringBoot与其他框架的整合,这些应用层面的框架,底层还是基于JVM运行,这些年涌现的各种框架看似提升了研发工程师的开发效率,但是底层的JVM才是开发的核心。相信大多数同学都碰到过,系统的卡顿现象,通常的做法是重启项目来解决,但是过一段时间之后又出现卡顿现象,然后再重启,这样的操作也行,可是对于研发工程师来讲,这个时候应该思考出现卡顿背后的深层次原因,是JVM堆栈大小设置得不合理,还是GC算法选择不合理导致,那就要去深入理解JVM的各个部分的运行逻辑。

 2)如何判断要进行JVM调优
 除了上述系统卡顿,如果通过监控程序发现Java应用的CPU周期性地飙得非常高,或者日志报错OOM、栈溢出等等错误,这时候就要考虑对JVM进行调优。
 早期我在项目中用JDK自带的监控程序jvisualvm,还有商业版的jProfiler监控程序的CPU/内存占用情况,后来使用阿里的Arthas监控线上的各种项目,这些JVM工具极大地方便了我定位问题,在使用这些工具的同时,也深入学习了JVM从加载,初始化到运行的整个原理。

 3)学习JVM的经验总结
 我是结合项目中遇到的问题,在使用工具排查问题的同时,学习JVM,先整体再局部。学习的主要渠道包括:看博客、看视频资料,写总结,不断地复盘,对于JVM的各个部分逐个击破。不得不说,JVM体系很庞大,但是我们做技术的,不仅仅要学习技术本身,更重要的是深入思考里面的设计思想,只有掌握了“内力”,学习其他的技术才能融会贯通,在此我附一张目前自己总结的JVM思维导图(还在学习中...)

JVM导出.png

道可顿悟,事需渐修!

目录
相关文章
|
2月前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
1月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
57 0
|
2天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
23 4
|
2天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
20 4
|
2天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
12 1
|
12天前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题
|
1月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
1月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
2月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
64 1
|
2月前
|
Oracle 安全 Java
深入理解Java生态:JDK与JVM的区分与协作
Java作为一种广泛使用的编程语言,其生态中有两个核心组件:JDK(Java Development Kit)和JVM(Java Virtual Machine)。本文将深入探讨这两个组件的区别、联系以及它们在Java开发和运行中的作用。
130 1