工作中使用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思维导图(还在学习中...)
道可顿悟,事需渐修!
数字创新的时代,每个行业都涌现出一批“数字创新者”。他们在这个时代里站出来...
2021年5月15日,以“相信边缘的力量”为主题的全球边缘计算大会在深圳成功召开。...
怎样制作 小程序 ?制作小程序,首先需要注册申请一个小程序。制作小程序,可以...
信息咨询类问题 云服务器没有普通公网 IP 如何实现公网访问? EIP 与普通公网 IP...
Web常用开发工具有哪些?常用工具推荐,IT程序员为了快速、高效地完成任务,会使...
概要 Spring实现了一套重试机制,功能简单实用。Spring Retry是从Spring Batch独...
01简介 这篇文章介绍一个好用的抓包工具Wireshark, 用来获取网络数据封包,包括...
好不容易实现了choropleth_mapbox地图,也顺道把散点地图、热力地图、线形地图处...
“十三五”以来,我国建成了全球规模最大的信息通信网络 工业化和信息化融合步伐...
据了解,目前华为内网云笔记篇数高达58万。数字化时代,职场人摘取对自身有用的信...