01_什么是JVM?

什么是JVM?

定义

Java Virtual Machine : Java程序的运行环境( Java二进制字节码的运行环境)

好处

  • 一次编写随处运行
  • 自动内存管理(垃圾回收管理)
  • 数组下标越界检查(C/C++中数组下标越界是不做任何检查的,越界可能会导致覆盖到其他代码使用的内存)
  • 多态(面向对象的基石,使用虚方法表来实现多态,借鉴了C++)

比较

JVM/JRE/JDK三者的区别及关系见下图

学习JVM有什么用?

  • 面向面试官编程(大家都懂~)
  • 理解底层的实现原理(比如自动拆装箱怎么实现的,增强for循环,动态代理是怎么实现的)
  • 中高级程序员的必备技能(不光是要写CRUD和业务逻辑,还需要解决和定位一些实际问题,比如项目上线后响应缓慢,内存溢出等)

常见的JVM有哪些?

首先JVM是一套规范,市面上有很多遵循该规范的JVM实现,以下是常见JVM对比,图片摘自维基百科

注: 本系列涉及到的所有内容均是HotSpot虚拟机

学习内容包含哪些?

由上图JVM的构成可以看出JVM主要有三部分构成:

  1. 类加载器
  2. JVM内存结构(即运行时数据区,核心关注这里 的栈、堆、方法区)
  3. 执行引擎(一般都是JIT编译器和解释器共存)

对于执行引擎而言:

  • JIT编译器(主要影响性能):编译执行; 一般热点数据会进行二次编译,将字节码指令变成机器指令。将机器指令放在方法区缓存
  • 解释器:逐行解释字节码

一个JAVA类从编译到执行的流程:

  1. 将JAVA类源码编译为二进制字节码
  2. 通过类加载器将该类二进制字节码加载到JVM中
  3. 类相关的信息加载到JVM内存中的方法区
  4. 类中创建的实例对象存放在JVM内存中的堆区
  5. 堆中的对象在调用方法时又会用到虚拟机栈,程序计数器,本地方法栈
  6. 方法执行时每行代码是由执行引擎中的解释器进行逐行解释执行
  7. 方法中的热点代码(频繁调用的代码)会被JIT编译器进行优化后执行
  8. 垃圾回收器GC对堆中的不再被引用的对象进行定期的回收释放内存
  9. 如果用到了JAVA代码不方便实现的功能,必须调用底层操作系统的功能,此时借助本地方法接口来调用操作系统提供的一些功能方法

本系列主要学习以下内容:

  1. JVM内存结构
  2. GC垃圾回收
  3. 类的字节码结构及编译前优化
  4. 类加载器(类加载的几个阶段,有哪些加载器)
  5. 类运行时的运行期优化(即时编译器优化)
posted @ 2020-08-07 00:25  slumberjax  阅读(139)  评论(0)    收藏  举报