Java 虚拟机概述
1、什么是 JVM
1)定义
Java Virtual Machine ,Java 程序的运行环境(Java 二进制字节码的运行环境)。
2)好处
一次编译,处处执行(跨平台,屏蔽了底层与操作系统的交互)
自动的内存管理,垃圾回收机制(现在很多语言都支持自动内存管理,但是Java出现的比较早,当时主要是与C/C++对比,很多其他语言程序员加入了简单方便的Java阵营)
数组下标越界检查
多态(底层通过虚方法表实现)
3)比较JVM、JRE、JDK 的关系,如下图所示
2、学习 JVM 有什么用
- 成为中高级程序员必备(中高级程序员应该能用JVM的知识解决一些实际问题,如排查线上项目内存溢出、响应缓慢等)
- 想走的长远,就需要懂原理,比如:自动装箱、自动拆箱是怎么实现的,反射是怎么实现的,垃圾回收机制是怎么回事等待,JVM 是必须掌握的。
3、常见的 JVM
JVM是一套规范,各个厂商可以遵从这套规范做不同的JVM实现,目前主流的JVM如下图,有Oracle的hotspot,eclipse的openJ9等我们主要学习的是 HotSpot 版本的虚拟机。Oracle的很多东西是收费的商业版本,OpenJDK是免费开源版本。
4、学习的路线
ClassLoader(类加载器):Java 源代码编译成二进制后,会经过类加载器,这样才能加载到 JVM 内存中运行。
Method Area(方法区):类的字节码是加载到方法区中。
Heap(堆):主要是类的实例对象。
当类调用方法时,会用到 JVM Stack(虚拟机栈)、PC Register(程序计数器)、本地方法栈。
方法执行时的每行代码是有执行引擎中的解释器逐行执行,方法中的热点代码频繁调用的方法,由 JIT 编译器优化后执行,GC(垃圾回收) 会对堆中不用的对象进行回收。需要和操作系统打交道就需要使用到本地方法接口。
学习顺序:
1 内存结构
2 垃圾回收
3 字节码和类加载
4其他