JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别。
JVM可以说和我们是老朋友了,但是在工作中的应用场景也许不如那些框架,但是在关键时候还是得靠它去搞定问题,俗话说得好,知己知彼,方能百战不殆,JVM作为前往高级工程师的一道坎,从这篇文章开始,我们会去逐步的分析,讲解,攻克这座大山。
JVM(Java Virtual Machine),翻译成中文就是Java虚拟机,总所周知,Java语言有一个非常鲜明的特性,也是前期Java 发展的口号之一
Write Once Run Everywhere
“一次编写,到处运行”,相信作为一名Java开发人员,我们对这句话都不会陌生,这句话的底气就来源于我们的JVM。
其中的原理就是,我们所编写的源程序java文件,被编译成了JVM可以识别的字节码文件(以class为后缀的文件),到处运行所依赖的其实就是为不同的平台实现了不同的虚拟机。
java的程序运行在JVM上,而非直接运行在CPU上。
首先,我们需要知道的是,作为一个虚拟机,必定是拥有自己的 内存机制 ,所以我们必须对他的内存机制有所了解,其中包括了 内存结构,垃圾回收机制 等一些内容。
其次,我们需要知道,我们写的源代码被翻译成了 字节码文件 (因其后缀名为class,所以也会被称为类文件),对于这个文件的结构,我们必须有所了解,在知道了该类的结构下,对于一些 并发 和 多线程 的知识才能做到洞若观火,知其然知其所以然。
该字节码文件在进入虚拟机到执行之前,会经历一系列的过程,我们对于这个过程的机制一般称为 类加载机制 ,当这个类被加载到JVM中,在运行的过程中,会有一系列的 指令 去帮助程序到达最终的目的。
其实,上面说了那么多,都是在帮助我们对于java文件的一个执行过程发生的事情有一个更深的了解,在遇到问题时,我们可以胸有成竹,刨根问底的去解决问题,但是在日常工作中,我们不会甚至肯定不会去看我们写完的字节码文件,我们关心的是如何使用 工具 去 调优 ,使最低的成本发挥最高的价值,通过对JVM的调优使我们的程序的鲁棒性得到提升。
虽然,JVM叫做Java Virtual Machine,但是需要注意,随着Java的发展壮大,有越来越多的语言加入到JVM生态中,比如我们耳熟能详的Groovy,Scala,Kotlin等等,他们都是依托于JVM平台的,编译产生的文件也都是后缀为class的字节码文件。