JVM:跨语言的平台

  • Java虚拟机不关心运行在其内部的程序是使用何种编程语言写的,只关心“字节码”文件。只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,就能被虚拟机识别并装载。

特点:
1、一次编译,到处运行(跨平台性)
2、自动内存管理
3、自动垃圾回收功能

JVM的位置

java 中 使用 汇编语言 jvm 汇编语言_Java

JVM是运行在操作系统之上,与硬件没有直接的交互。

JVM的整体结构

java 中 使用 汇编语言 jvm 汇编语言_java 中 使用 汇编语言_02


详细图:

java 中 使用 汇编语言 jvm 汇编语言_jvm_03

▪ 方法区和堆是多线程公用的,虚拟机栈、本地方法栈和程序计数器是线程独有的。
▪ 执行引擎(即操作系统)只能识别机器指令,字节码指令不等于机器指令,要使字节码指令能够执行,就需要借助执行引擎将高级语言翻译为机器语言。

Java代码执行流程

java 中 使用 汇编语言 jvm 汇编语言_JVM_04

▪ 操作系统CPU执行的是01的机器指令
▪ Java执行的二次编译,第一次编译是源码编译成class文件,第二次JIT编译器编译成操作系统能执行的机器语言

JVM的架构模型

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。

  • 优点:跨平台,指令集小,编译器容易实现
  • 缺点:执行性能比寄存器差一些,实现同样的功能需要更多的指令
JVM的生命周期

虚拟机的启动:是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的
虚拟机的执行:程序开始执行的时候,虚拟机开始运行,程序结束时就停止。执行一个Java程序的时候,是在执行一个叫做Java虚拟机的进程。
虚拟机的退出:

  • 程序正常执行结束
  • 程序在执行过程中遇到了异常或者错误而异常终止
  • 由于操作系统出现错误而导致Java虚拟机进程终止
  • 调用Runtime类的halt方法或者System类中的exit方法