1、虚拟机(Virtual Machine)概念:
     就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。
大体上虚拟机可以分为系统虚拟机程序虚拟。

      系统虚拟机(Visual Box, VMware),他们完全是对物理计算机的仿真,提供了
一个可运行完整操作系统的软件平台。
      程序虚拟机(java虚拟机),它专门为执行单个计算机程序而设计,在java虚拟
机中执行的指令称之为java字节码指令。(JVM层)
      无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的
资源中

2、java虚拟机概念:
     是一台执行java字节码的虚拟机,它拥有独立的运行机制其运行的java字节码
也必须有java语言编译而成。jvm包含一套字节码指令集一组寄存器一个栈
一个垃圾回收堆一个存储方法域
     JVM平台的各种语言可以共享java虚拟机带来的跨平台性、优秀的垃圾货收器,
以及可靠的及时编译器。

3、java虚拟机的作用
     java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,
解释/编译为对应平台上的机器指令执行。
每一条java指令,java虚拟机规范中都
有详细的定义,如怎么取操作数怎么处理操作数,处理结果放在哪。

     特点:一次编译,到处运行。自动内存管理。自动垃圾回收功能

4、JVM运行时数据区:

     JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区
【JAVA 堆、方法区】、直接内存

5、JVM的整体结构:

6、java代码的执行流程:
     ① Java 源文件—->编译器—->字节码文件
     ② 字节码文件—->JVM(解释器)—->机器码

 每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也就是 Java 为什
么能够跨平台的原因了 ,当一个程序从开始运行,这时虚拟机就开始实例化了,
多个程序启动就会存在多个虚拟机实例。程序退出或者关闭,则虚拟机实例消亡,
多个虚拟机实例之间数据不能共享

7、指令集架构:
     常见的指令集架构有两种一种是基于寄存器的指令集架构,一种是基于栈的指令集
架构。JVM采用的是后者。
     1、可以执行比较,基于栈式架构不需要硬件支持,可以实现跨平台;
基于寄存器架构则完全依赖硬件,可以执行差
     2、设计上比较,基于栈式架构使用零地址指令方式分配(没有地址,只
有操作数,其执行过程依赖于操作栈)避开了寄存器的分配难题,设计和实
现更简单,适用于资源受限的系统(机顶盒,打印机等嵌入式设备);而基于
寄存器架构的指令集往往使用一地址、二地址、三地址指令为主。
     3、速度上比较,基于栈式架构的指令集在内存中操作;而基于寄存器架
构的指令集直接由cpu执行,速度更快。
     4、指令集数量比较,完成相同的操作,基于栈式架构比基于寄存器架构
的指令集数量要多,但是指令小,编译器实现容易。

8、JVM的生命周期
     1、虚拟机的启动,
     是通过引导类加载器(bootstrap class loader)创建一个初始类(initial 
class)来完成,这个类是由虚拟机的具体实现指定的。
     2、虚拟机的执行,
     运行中的虚拟机有着一个清晰的任务:执行java程序。
     程序开始执行它在运行,程序结束是它结束。
     执行一个所谓的java程序时,实际上时执行一个叫做java虚拟机的进程。
     3、虚拟机的退出,
     程序正常执行结束。
     程序在执行过程中遇到异常或错误而异常终止。
     由于操作系统出现错误而导致java虚拟机进程终止。
     某线程调用Runtime类或System类的exit方法,或Runtime类的halt
方法,并且java安全管理也允许这次exit或halt操作。
     JNI规范描述了用JNI来加载或卸载java虚拟机时,java虚拟机的退出情况。

9、三大虚拟机:
     HotSpot,服务器、桌面到移动端、嵌入式 。
     JRockit,专注于服务器端应用(最快,不包含解析器)。
     J9,服务器端、桌面应用、嵌入式等多用途VM。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐