JVM虚拟机基础
JVM虚拟机(一)
JVM 全称Java Virtual Machine,也就是我们耳熟能详的Java 虚拟机。它能识别.class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。
Java执行流程
当我们编写完程序之后文件就是.Java
文件通过Javac指令编译之后就是.class
文件,之后就是由JVM将类加载到方法区中,执行引擎执行这些字节码。
过程如下:Java 文件->编译器>字节码->JVM->机器码
。
JVM的跨平台、跨语言性
-
跨平台
Java官网提供了各个系统版本的JDK,我们根据系统下载对应版本的JDK就可以将我们写的类运行在不同的操作系统上。
官网直达:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
-
跨语言
因为JVM是通过识别字节码(.class文件)的方式进行运行的,所以只要其他语言如果也可以编译为字节码文件则也可以在JVM上运行,例如:Groovy、Kotlin等等一些语言。所以JVM也是一定程度上奠定了Java强大的生态圈。
JVM相关实现
JVM规范的存在提供了一些JVM的具体的实现。
-
HotSpot
使用最多的Java虚拟机,通过javac -version的命令可以看到。
-
Jrocket
原隶属于BEA公司,号称最快的JVM,后被Oracle所收购,与HotSpot所合并。
-
J9
IBM公司的JVM,主要用于自家产品上(IBM WebSphere 和IBM 的AIX 平台)。
-
TaobaoVM
淘宝根据HotSpot为自身定制的JVM,目前阿里、天猫都在使用。
-
zing
属于zual公司,很牛,但是很贵。它的垃圾回收速度非常快,之后它的垃圾回收算法被HotSpot所吸收形成了现在的ZGC。
JVM 整体知识模块
从下图中可以看到JVM的知识模块是比较多的,但是基本上都会与内存结构牵扯到一些关系,所以内存结构是非常重要的一块知识点。