写在最前,本篇文章大部分来源于 《深入理解Java虚拟机》 以及b站尚硅谷JVM全套教程的提炼,并附带自己的理解,主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。
JVM:跨语言的平台
Java虚拟机不关心内部程序是否由java语言编写,只要相应的编程语言编译出来的字节码文件能够遵循Java虚拟机规范,java虚拟机就可以用来解释运行对应的编程语言。即Java虚拟机拥有语言无关性。而java具有平台无关性。
虚拟机不关心Class文件的来源语言。
-
字节码
- java字节码,指的是用java语言编译而成的字节码,任何java平台上执行的字节码格式都是一样的,所以也称为JVM字节码。 多语言混合编程
- Java平台上,多语言混合编程正成为主流。各语言之间的交互不存在困难,就像使用原生API一样,其原因是这些语言都最终运行在一个虚拟机之上。
虚拟机与Java虚拟机
虚拟机
虚拟机(Virtual Machine),就是一台虚拟的计算机。是一款软件,用以执行一系列虚拟计算机指令。大体上可以分为系统虚拟机
和程序虚拟机
。
- 系统虚拟机:Visual Box, VMware。是对物理计算机的仿真,提供了可运行完整操作系统的软件平台。
- 程序虚拟机:Java虚拟机,专门为执行单个计算机程序而设计,在java虚拟机中执行的指令称为Java字节码指令。
Java虚拟机
Java虚拟机是执行Java字节码(由于JVM跨语言的特性,所以现在也称为JVM字节码)的虚拟计算机。
JVM平台的各种语言可以共享JVM带来的跨平台性,优秀的垃圾回收器,以及可靠的即时编译器。
Java技术的核心就是JVM,因为所有的java程序都运行在JVM内部。
作用:
JVM是二进制字节码的运行环境,负责加载字节码到其内部,解释/编译为对应平台上的机器指令执行,每一条Java指令,JVM规范都有详细的定义,如:怎样取、处理操作数。
特点:
- 一次编译,到处运行
- 自动内存管理
- 自动垃圾回收功能(降低内存泄漏和溢出的风险)
JVM的位置
JVM的整体结构*
接下来讲解的顺序如图所示:
- 类装载器
- 运行时数据区
- 执行引擎(解释器、即时编译器: 、垃圾回收器)
字节码指令不等同于机器指令,执行引擎将字节码指令翻译为机器指令
HotSpot VM是目前市面上高性能虚拟机的代表之一
采用解释器与即时编译器并存的架构
Java代码执行流程
其中编译器环节的任何一个环节失败,都不能正确生成字节码文件。
JVM的生命周期
启动
JVM的启动是通过引导类加载器创建一个初始类来完成的,是由虚拟机的具体实现指定的
执行
程序开始时运行,程序结束时停止
执行Java程序,实际上执行的是一个JVM的进程
退出
- 正常执行结束
- 异常或错误而终止
- 操作系统草屋
- Runtime类或System类的exit方法(被Java安全管理器允许)