虚拟机概述

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

比较出名的系统虚拟机有Visual Box、VMware,他们是完全对物理计算机的仿真,提供一个可运行完整操作系统的软件平台。

Java虚拟机就是典型的程序虚拟机,他专门为执行单个计算机程序而设计的,在Java虚拟机中执行的指令我们称为Java字节码指令。

无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中,比如java虚拟机我们可以设置堆内存大小,VMware的虚拟机我们可以设置CPU数,内存数等等。这些就是虚拟机提供的资源,软件运行会被限制在该资源中。

java虚拟机

java虚拟机是一台执行java字节码的虚拟计算机,他拥有独立的运行机制,其运行的java字节码也未必由java源文件编译而来。
java虚拟机是在操作系统上做了一层封装,屏蔽了具体操作系统API的底层细节,使得java程序具有跨平台的特性。
JVM是跨语言的,多种语言可以运行在JVM虚拟机上,从而可以利用JVM带来的跨平台特性和优秀的垃圾回收机制。以及可靠的即时编译器。
在这里插入图片描述
多种编程语言只要提供各自的编译器,把源代码编译成符合java虚拟机规范的字节码文件,就可以在JAVA虚拟机上运行。这时应该叫JVM字节码文件了。

java技术的核心就是JAVA虚拟机,因为所以java程序都运行在java虚拟机内部。

java虚拟机的作用

java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译成对应平台(unix、windows等)的机器指令执行,每一条java指令,java虚拟机规范中都有其详细定义,怎么取操作数,怎么处理操作数等。
特点:

  • 一次编译,处处运行。
  • 自动垃圾回收。
  • 自动内存管理
java虚拟机的位置

在这里插入图片描述
java虚拟机运行在操作系统之上,没有与硬件直接关联,对硬件的操作都是通过操作系统间接实现。

java虚拟机在java体系中的位置:
在这里插入图片描述
java虚拟机是在JRE java运行时环境的最底层。

JAVA虚拟机的整体结构

在这里插入图片描述
java虚拟机主要分为三个部分:

  1. 类装载子系统:负责装载字节码文件到内存当中,生成Class对象。
  2. 运行时数据区:java程序运行时数据的存放,比如对象,类信息,引用等等。
  3. 执行引擎:分为解释器、JIT即时编译器、垃圾回收器,把高级语言解释编译成机器语言,用于解释执行java程序
java程序执行流程

在这里插入图片描述

  1. 首先是java源代码经过编译器(比如javac)进行编译,生成字节码文件。
  2. 字节码文件被java虚拟机的类加载子系统装载并生成对应的信息,比如一个个Class对象。
  3. 执行引擎对字节码进行解释/编译 执行。
java虚拟机的生命周期

虚拟机的启动:java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类来完成的,这个类由虚拟机的具体实现指定。

虚拟机的执行:一个运行中的java虚拟机有一个清晰的任务,就是运行java程序。程序开始执行时虚拟机运行,程序执行结束它就停止。执行一个所谓的java程序的时候,真真正正在执行的是一个叫做java虚拟机的进程。 一个运行中的java进程实际上是一个java虚拟机进程。

虚拟机的退出:程序正常执行结束、程序遇到异常或者错误而异常终止、因为操作系统错误而导致java虚拟机终止、某个线程执行RunTime类的exit方法或者half方法,或者System类的exit方法,并且java安全管理器也允许这个操作。 以上的情况都会导致java虚拟机进程退出。

java虚拟机的种类

java虚拟机有多种多样的种类,由不同的厂商提供,比如HotSpot VM、SUN Classic VM、Exact VM等等。不同的虚拟机的具体实现会有所不同,但是都遵循着java虚拟机的规范。

HotSpot虚拟机:目前HotSpot虚拟机占有绝对的市场地位,不管JDK6、JDK8、SUN/Oracle JDK 和Open JDK的默认虚拟机都是HotSpot。

Logo

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

更多推荐