专栏名称: 程序员之家
程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!
目录
相关文章推荐
51好读  ›  专栏  ›  程序员之家

一图读懂JVM架构解析

程序员之家  · 公众号  · 程序员  · 2017-04-26 21:59

正文

作者: Jackson Joseraj

译者:码农网-小峰

原文:The JVM Architecture Explained

译文:www.codeceo.com/article/jvm-architecture-explained.html

点击文末阅读原文即可前往


每个Java开发人员都知道字节码由JRE(Java运行时环境)执行。但许多人不知道JRE是Java Virtual Machine(JVM)的实现,它分析字节码,解释代码并执行它。作为开发人员,我们应该知道JVM的架构是非常重要的,因为它使我们能够更有效地编写代码。在本文中,我们将更深入地了解Java中的JVM架构和JVM的不同组件。


什么是JVM?


虚拟机 是物理机器的软件实现。Java是用在VM上运行的WORA(Write Once Run Anywhere)概念而开发的。编译器将Java文件编译为Java .class文件,然后将.class文件输入到JVM中,JVM会加载并执行类文件。下面是JVM的架构图。



JVM如何工作?

如上面架构图所示,JVM分为三个主要子系统:

  1. 类加载器子系统(Class Loader Subsystem)

  2. 运行时数据区(Runtime Data Area)

  3. 执行引擎(Execution Engine)

1.类加载器子系统


Java的动态类加载功能由类加载器子系统处理。它在运行时,而不是编译时首次引用类的时候加载、链接、并初始化类文件。


1.1加载

类将通过此组件加载。Boot Strap Class Loader,Extension Class Loader和Application Class Loader是有助于实现的三个类加载器。


(1)Boot Strap Class Loader——负责加载来自于Bootstrap类路径的类,就是rt.jar。此加载程序将给予最高优先级。

(2)Extension Class Loader——负责加载在ext文件夹(jre \ lib)内的类。

(3)Application Class Loader——负责加载应用程序级类路径,路径提到环境变量等


上面的类记载器在加载类文件时遵循Delegation Hierarchy 算法。


1.2链接


(1)验证——字节码验证器将验证生成的字节码是否正确,如果验证失败,我们将得到verification error。

(2)准备——对于所有的静态变量,内存将被分配和配置默认值。

(3)解决——所有的符号存储器引用都将替换为来自Method Area的原始引用。


1.3初始化


这是类加载的最后阶段,这里所有的静态变量都将被赋予原始值,并执行静态块。







请到「今天看啥」查看全文