乐趣区

JVM(一)史上最佳入门指南

提到 Java 虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM 世界”的时候,会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的,其实是恐惧本身。而作为整个 JVM 系列的首篇,本文将带你解除刚开始学习 JVM 时的种种疑惑。比如:什么是 JVM?为什么学习 JVM?怎么有效的学习 JVM?带着以上的这些问题,让我们一起走入 JVM 的世界吧。
一、什么是 JVM?
JVM 简介:JVM 是 Java Virtual Machine 的缩写,中文翻译为 Java 虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。简单来说 JVM 是用来解析和运行 Java 程序的。
Java 有一个非常重要的特点“平台的无关性”,就是使用 JVM 实现的。Java 语言只需要生成 Jvm 上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,因为 JVM 本身屏蔽了与具体平台相关的信息,使得 Java 能够“一次编译,到处运行”。
二、为什么要学习 JVM?
学习 JVM 无外乎以下几个原因:
1、程序调优
不同的程序(业务场景)需要不同的 Jvm 配置,比如设置不同的垃圾收集器、设置新生代和老生带的内存配置和占比等,不同的配置对于程序的运行有着千差万别的影响。而 Jvm 默认的配置只能保证程序能够“运行”,而想要“很好的运行”甚至是“更好的运行”,就是学习 Jvm 最主要的因素之一。
2、排查程序运行问题
有些程序可能在线上使用的时候会遇到各种各样的问题,而这些问题通常都是致命的,比如内存溢出,死锁导致的程序运行缓慢等,而这些问题在开发和小量并发测试阶段是很容易被忽略的缺陷,所以学习好了 Jvm 才能在关键的时候,临危不乱帮你扫除系统中的“顽疾”。
3、掌握了程序执行的根本和原理
也就是很多人说的:不但要“知其然”,还要“知其所以然”。
4、规避写代码时候的一些错误
比如避免重载可变长参数的调用(后面文章会给出具体的案例)。
5、应付面试
不得不说这也是很多人学习的目的之一,当然这也是积极的推动力,如果你明白“鲶鱼效应”的话。
6、掌握了其他语言的通用机制
JVM 还有一个强大之处是,它不止可以运行 Java 程序,还可以运行 Scala、Clojure、Groovy,以及时下热门的 Kotlin,学习 JVM 便可以了解这些语言的通用机制,甚至于让这些语言共享生态系统。
三、怎么有效的学习 JVM?
以上了解了学习 JVM 的种种好处,但是怎么有效的学习 JVM 呢?有人可能一看到“JVM”或者“Java 虚拟机”这几个字就懵了,不知道它是啥,更别说要怎么学了。而本小节就是要教大家怎么有效的学 JVM,把 JVM 做一个知识点的划分。可以说,掌握了以下列举的知识点,就是掌握了整个 JVM。
JVM 的知识点,分为如下几个:
1、JVM 的组成
只有了解了 JVM 的组成部分,才能算的上真正的了解了 JVM,JVM 的组成 5 个部分:堆、虚拟机栈、本地方法栈、程序计数器、方法区,后面文章会分别介绍 5 个部分的具体用途。
2、多种垃圾回收算法
Jvm 中有很多垃圾回收算法,不同的算法优缺点也各不相同,比如:标记清除算法和复制算法、标记清楚算法会产生多种空间碎片、复制算法把内存分为两块,性能虽然很好但是每次只能使用一块,又浪费了内存的空间,那有没有相对完美的算法呢?答案肯定是有的,由于篇幅的原因,后面文章会详细讲解。
3、多种垃圾收集器
Jvm 的垃圾收集器有很多,比如最早版本的串行收集器 Serial,发展历史最悠久的收集器,它是采用复制算法的新生代收集器,它是一个单线程收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程,直至 Serial 收集器收集结束为止(“Stop The World”)。还有 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器;还有比较前沿的 G1(Garbage-First)收集器等。
学习这些收集器,一方面是为自己程序配置合适的收集器,另一方面是每个收集器的设置参数都不相同,学习了这些收集器的配置之后,可以为程序设置最优的运行匹配参数。
4、JVM 分析工具
Jvm 的分析工具用于排查程序运行的缺陷,找出程序的问题所在,从而保证程序的稳定运行,Jvm 分析器分为:命令行工具(官方称之为实验性质的工具,但稳定性是不容置疑的),还有视图分析工具,前者当然优于后者,但后者是建立在前者的基础上的,本系列后面会详细的把每个工具进行深入的讲解。
5、Java 类加载机制
Java 类加载机制,讲的是 Java 的类在 Jvm 中的加载以及运行机制,对于认识 Java 是怎么运行的有着非常大的帮助,这也是学习 Java 非常有趣的一点,你可以看到 Java 运行的整个过程,是完全透明化的,给人一种“掌控感”,这是 Java 语言天生支持的,所以会觉得 Java 这门语言很有趣。
6、JVM 常用优化配置
学习 Jvm 收益最大的其实就是,使用 Jvm 的这些常用配置,让你的程序运行的更高效,所以对于这方面的学习是必不可少的。
四、总结
本文带领大家对 Jvm 整体的印象有了初步的认识,我们明白了 Jvm 的学习能带给我们的收益,以及 Jvm 该如何学习,而这些问题恰好是刚开始学习 Jvm 时最大的障碍。万事开头难,好的开始是成功的一半,恭喜你学习了 Java 领域中一项不可或缺的技能,如果觉得本文不错,欢迎转发到朋友圈或分享给你的朋友。
此篇是 Jvm 系列的第一篇,关注作者公众号,了解后续更多精彩内容:

退出移动版