JVM简介
JVM(Java Virtual Machine)即Java虚拟机,是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成,JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回器,以及可靠的即时编译器。
Java中存在一个特性:跨平台性,这就是因为JVM的原因,我们只需要写一份代码,将代码放到JVM上面运行即可,这是因为JVM运行在操作系统之上,它与硬件没有直接的交互,而不同操作系统是有不一样的JVM的,JVM将我们写的代码和操作系统隔离开了。
说明:JVM整体结构主要讲的是HotSpot VM
JVM主要组成部分
JVM的整体结构包含了 类加载器系统、运行时数据区、执行引擎、本地方法接口等组件,其中 运行时数据区 又包含了方法区、堆、虚拟机栈(Java栈)、本地方法栈、程序计数器等,具体的用处会在后面说明
JVM的执行过程
编写完 Java文件之后,会通过Java编译器将Java文件编译成 class文件,编译成class文件之后,这时候可以通过类加载器将class文件加载到内存中,同时会在方法区生成一个 Class 对象实例,然后会对这个class文件进行检查、赋初值、初始化等过程,最终由执行引擎进行代码的执行
JVM生命周期
虚拟机的启动
Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。
虚拟机的执行
-
一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。
-
程序开始执行时他才运行,程序结束时他就停止。
-
执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。
虚拟机的退出
有如下的几种情况:
-
程序正常执行结束
-
程序在执行过程中遇到了异常或错误而异常终止
-
由于操作系统用现错误而导致Java虚拟机进程终止
-
某线程调用Runtime类或system类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。
-
除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时,Java虚拟机的退出情况
题外话:怎么查看class文件内容
看class文件,其实是一个一种二进制的类文件 ,它的内容是JVM指令,但是我们一般在IDEA中查看class文件的时候,他会将二进制文件自动转化为我们可以看懂的Java代码
其实我们可以借助 Javap 命令来查看生成的二进制文件,在class文件的目录中,直接使用
javap -c xxxx.class
就可以出现相应的字节码文件
结束语
本章只是对于JVM的一个简介,后面会写 类加载器、运行时数据区、垃圾回收等JVM相关的内容