原文地址:《The JVM Architecture Explained 》java
每一个Java开发者都知道字节码是被JRE(Java运行时环境)所执行的。可是许多人并不知道实际上JRE是Java虚拟机(JVM)的实现。它分析字节码,解释代码并执行它。做为一个开发者,了解JVM的体系结构是很是重要的,由于它使咱们能更有效的编写代码。在这篇文章中,咱们将更深刻的了解Java中的JVM体系结构和JVM的不一样组件。数组
虚拟机是物理机器的软件实现。Java语言当时是基于编写一次处处运行的理念被开发出来的,其中处处运行指的是运行在虚拟机上。编译器将java文件编译成.class文件,而后.class文件被输入到JVM中,JVM会加载并运行这些.class文件。下图展现了JVM的体系结构。安全
JVM体系结构 多线程
![]()
正如上图展现的,JVM被分为如下三个主要的子系统:jvm
Java的动态类加载功能是由类加载子系统处理。它加载,连接,并初始化类(当在运行时第一次引用该类时)。性能
类都经过该组件进行加载。BootStrap ClassLoader、 Extension ClassLoader、Application ClassLoader这三个类加载器协同完成这个目标。优化
以上这些类加载器将遵循双亲委托机制装载类文件。(即当一个类须要加载时,先从Bootstrap加载,没有的话,再从Extension加载,仍是没有的话,才从Application加载。)线程
这是类加载的最后阶段。全部静态变量将会被赋予初始值而且静态构造块将会被执行。翻译
运行时数据区被分为五个主要的区域。3d
分配到运行时数据区的字节码将会被执行引擎执行。执行引擎将会读取字节码并逐个执行。
解释器:解释器解释字节码快,但执行慢。而且在屡次调用同一个方法时,都须要从新解释。
JIT编译器:JIT编译器弥补了解释器的缺点。执行引擎会借助解释器去转换字节码。可是当它发现有重复的代码时,会使用JIT去编译整份字节码并将它改成本地代码。本地代码将会被直接使用在重复的方法调用,从而提升系统的性能。
垃圾回收器:回收和删除未被引用的对象。垃圾回收可被System.gc()方法触发,可是不保证立马执行。