JVM 全称Java Virtual Machine,也就是我们耳熟能详的Java 虚拟机。它能识别.class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。
Java执行流程
当我们编写完程序之后文件就是.Java 文件通过Javac指令编译之后就是.class 文件,之后就是由JVM将类加载到方法区中,执行引擎执行这些字节码。
过程如下:Java 文件->编译器>字节码->JVM->机器码 。
JVM的跨平台、跨语言性
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的知识模块是比较多的,但是基本上都会与内存结构牵扯到一些关系,所以内存结构是非常重要的一块知识点。
JVM 内存区
class文件初始化时会将初始化的数据存放到方法区和堆中,当调用方法的时候会生成一个线程,线程中会虚拟出一块内存,通过执行引擎执行指令集,操作数据进行入栈出栈以及程序计数器计数,最后返回地址,从而完成一个方法的调用。
|