一、概述
1.1、Java发展中的重大事件
1.2、虚拟机 vs Java虚拟机
1.2.1、虚拟机
1.2.2、Java虚拟机
1.2.3、Java虚拟机的作用
Java虚拟机是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令指令。每一条Java指令,Java虚拟机规范中都有详细的定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。
1.2.4、特点
一次编译,到处运行;
自动内存管理;
自动垃圾回收功能;
1.3、JVM的位置
JVM是运行在操作系统之上的,它与硬件没有直接的交互。
1.4、JVM的架构图(概览图)
HotSpot JVM是目前市面上高性能虚拟机的代表之一;
它采用解释器与即时编译器并存的架构;
在今天,Java程序的运行性能早已脱胎换骨,已经达到了可以和C/C++程序一较高下的地步;
1.5、JVM的架构图(详细图)
1.6、JVM的生命周期
1.6.1、启动
Java虚拟机的启动时通过引导类加载器创建一个初始类来完成的,这个类是由虚拟机的具体实现指定的。
1.6.2、运行
(1)一个运行中的Java虚拟机有着一个清晰的任务,即:执行Java程序;
(2)程序开始执行时它才执行,程序结束时它就停止;
(3)执行一个所谓Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程;
1.6.3、退出
当出现以下情况时,虚拟机将会退出:
(1)程序正常执行结束;
(2)程序在运行过程中遇到了异常或者错误而异常终止;
(3)由于操作系统出现错误而导致Java虚拟机进程终止;
(4)线程调用Runtime类或者System类的exit()方法,或者调用Runtime类的halt()方法,并且Java安全管理器也允许这次exit或者halt操作;
1.7、各种JVM
1.7.1、HotSpot VM
1.7.2、Classic VM
1.7.3、Exact VM
1.7.4、JRockit(BEA)
1.7.5、J9(IBM)
1.8、JVM vs JDK vs JRE
1.8.1、JVM
概述:
JVM通俗的讲就是Java虚拟机,用来运行字节码文件,由于JVM针对不同的操作系统(例如:Windows、Linux、MacOS)有特定的实现,因此同一个字节码文件在这些不同的操作系统上执行时能够得到相同的结果。
什么是字节码?采用字节码的好处是什么?
在Java中,JVM可以理解的代码叫做字节码,即扩展名为.class的文件,它不面向任何特定的处理器,只面向虚拟机。Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且由于字节码并不针对一种特定的机器,因此Java程序无需重新编译,便可在不同的操作系统上运行。
Java程序从源代码到运行一般需要经过下面3个步骤:
注意事项:
执行.class===>机器码这一步时,JVM类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度相对较慢,而且,有些方法或者代码会被经常的调用(热点代码),所以引入了JIT编译器,而JIT属于运行时编译。当JIT完成第一次编译后,会将字节码对应的机器码保存下来,当下次再执行该代码时,可以直接使用机器码,显然机器码的运行效率是高于Java解释器的。
1.8.2、JDK
JDK的中文全称是Java开发工具包,它拥有JRE所拥有的一切,还有编译器和工具(javac,javadoc,jdb),它能够创建和编译程序。
1.8.3、JRE
JRE的中文全称是Java运行时环境,它是运行和编译Java程序所需的所有内容的集合,包括JVM,Java类库,Java命令,和其他的一些基础构件,但是它不能创建程序。