jvm的简介
什么是jvm?
java虚拟机就是二进制字节码的运行环境。我们可以把jvm看做是运行在不同系统上的一个软件应用的计算机,就比如说我们要打开图片,就得用看图软件,或者我们要对文件进行解压,是不是得用解压软件。就可以把它看出是一个软件,但是它是虚拟的,而且它是不与硬件是直接交互。
jvm是干啥的?
Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。因此在运行时,Java源程序需要通过编译器编译成为.class文件。jvm 只对字节码负责,就像函数式的关系,他不用关心是有什么语言编译的,只关心,编译后的字节码是否符合JVM 的规定,任何语言编译后的字节码文件只要符合jvm标准,然后都是可以在jvm上运行
虚拟机的作用
特点:
1,一次编译,到处运行
2,自动内存管理
3,自动垃圾回收功能
虚拟机的历史
现在流行的三大虚拟机:
-
Hotspot
-
-
IBM 的 J9
我们平时所说的就是Hotsprot虚拟机
jvm的架构模型
Java编译器输入的指令流基木上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。
基于栈式架构的特点:
-
设计和实现更简单,适用于资源受限的系统;
-
指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小编译器容易实现。
-
不需要硬件支持,可移植性更好,更好实现跨平台·基于寄存器架构的特点。
总结:
由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。
jvm的生命周期
虚拟机的启动:
Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。
虚拟机的执行
-
一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。
-
程序开始执行时他才运行,程序结束时他就停止。
-
执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。
jvm的内存模型:
如果对jvm内存模型不太了解可以参考文章:java内存区域模型和详解 - 古渡蓝按 - 博客园 (cnblogs.com)