目录
1、JVM的学习内容
2、JVM概述
3、字节码
4、虚拟机
5、HotSpot VM
6、Java代码的执行流程
1、JVM的学习内容
JVM大概分为三部分:
- 内存与垃圾回收
- 字节码与类的加载
- 性能监控与调优
2、JVM概述
JVM是运行在不同操作系统上的,和硬件没有直接交互,只是负责和操作系统交互。
JVM的通用性
JVM不只能运行java生成的字节码文件,还可以运行很多其他编程语言生成的字节码文件。
在Java7发布时,实现了在Java虚拟机平台上运行非Java语言编写的程序。
JVM不关心运行在其中的程序到底是用哪种语言编写的,它只关心字节码文件,也就是说,
JVM具有语言无关性
。只要一个字节码文件包含JVM的指令集、符号表和其他信息,它就能被JVM识别、装载并运行。
可以说,
Java不是最强大的语言,但JVM是最强大的虚拟机
。
JVM的作用
JVM就是二进制字节码的运行环境,负责装载字节码到其内部,解释或编译为对应平台上的机器指令执行。
每一条java指令,JVM规范中都有详细定义,比如怎么读取操作数,怎么处理操作数,处理的结果放在哪里等。
JVM的特点
- 一次编译,到处运行
- 自动内存管理
- 自动垃圾回收
JVM如何实现跨平台
其实很简单,在下载JDK时,需要选择你的操作系统型号,而JDK包含JRE,JRE包含JVM。
各个操作系统对应的JVM也是有区别的
。
3、字节码
Class字节码文件的内容
Class文件中,包含了JVM指令集、符号表,以及一些其他辅助信息。
字节码文件和java语言的关系
平时说的java字节码,指的是java语言编译生成的字节码。
但是准确地说,任何能在JVM平台上执行的字节码,格式其实是一样的,所以不应该叫java字节码,应该叫JVM字节码。
字节码文件和JVM的关系
不同的编译器,可以编译出相同格式的字节码文件,字节码文件也能在不同的JVM上运行。
JVM与java语言的关系
JVM和java语言其实没有必然的联系,因为JVM只与特定的二进制文件格式:Class字节码文件相关联。
4、虚拟机
虚拟机的分类
大体上,虚拟机可以分为两类:
- 系统虚拟机
- 程序虚拟机
系统虚拟机
例如Vmware,它们是对物理计算机的仿真,提供了一个可以运行完整操作系统的软件平台。
程序虚拟机
例如JVM,专门为执行单个计算机程序而设计。
虚拟机的特征
不管哪种虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。
为什么要管理内存
如果不去定期回收一些内存,程序运行到最后就会非常卡顿,不合理
内存管理方面
Java提供了JVM,负责帮助我们管理内存。
而c++需要程序员手动管理内存,如果不熟悉,就容易出很多问题。
5、HotSpot VM
HotSpot VM是Java自带的高性能虚拟机,被Open JDK和Oracle JDK使用。
它采用解释器与即时编译器并存
的架构。
6、Java代码的执行流程
源程序经过编译,得到一个或多个字节码文件,每个字节码文件对应一个具体的Java类。在对应操作系统的JVM上运行。