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领域中一项不可或缺的技能,如果觉得本文不错,欢迎转发到朋友圈或分享给你的朋友。


最后,为大家准备一篇「Java最常见200+面试题全解析」,助力大家找到合适的工作,这份面试题包含的模块有:


  • Java、Jvm 最常见面试题解析;
  • Spring、Spring MVC、MyBatis、Hibernate 面试题解析;
  • MySQL、Redis 面试题解析;
  • RabbitMQ、Kafka、Zookeeper 面试解析;
  • 微服务 Spring Boot、Spring Cloud 面试解析。
相关文章
|
2月前
|
Oracle Java 编译器
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
47 1
|
13天前
|
算法 安全 前端开发
JVM的基础入门(上)
JVM的基础入门(上)
45 0
|
3月前
|
存储 监控 算法
JVM入门手册(通俗版)
JVM入门手册(通俗版)
32 0
|
3月前
|
Oracle IDE Java
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)(下)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
37 1
|
3月前
|
Java 程序员 PHP
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)(上)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
32 0
|
7月前
|
存储 缓存 监控
JVM关键知识点整理,从入门到提高到实践
Java 虚拟机定义了各种在程序执行期间使用的运行时数据区域。这些数据区域有一些是在Java虚拟机启动时创建的,并在Java虚拟机退出时销毁,有一些数据区域是每个线程独有的,在线程创建时创建,在线程销毁时销毁,根据《Java虚拟机规范》的规定,Java虚拟机运行时所需要管理的数据区域主要如下图所示:
290 0
JVM关键知识点整理,从入门到提高到实践
|
8月前
|
存储 人工智能 Java
Jvm内存分析入门篇
Jvm内存分析入门篇
|
8月前
|
算法 Java
JVM学习笔记(2)——MarkWord和GC入门
JVM学习笔记(2)——MarkWord和GC入门
74 0
|
监控 Java API
Java Agent入门实战(三)-JVM Attach原理与使用
Java Agent入门实战(三)-JVM Attach原理与使用
|
8月前
|
Java 开发工具
Java 入门知识(JDK、JRE、JVM)
Java 入门知识(JDK、JRE、JVM)
66 0