理解JVM(2)- JVM体系结构

前一篇我们简单了解了JVM是什么,现在我们将从整体上认识一下JVM由哪些部分组成

我们看一下JVM的架构:


JVM Architecture

JVM字节码文件(JVM Languages Classes )

包括但不仅限于Java语言编译而成的Class文件。实际上,Java虚拟机不和包括Java在内的任何编程语言绑定,它只与“Class文件”这种特定的二进制文件格式关联,只要特定语言的编译器能将代码编译成Class文件,虚拟机并不关心Class的来源是何种语言,如下图所示


JVM的语言无关性

类加载器(Class Loader)

Class文件需要被加载到内存里才能得以运行和使用。虚拟机把Class文件加载到内存后,对数据进行验证、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。具体内容,我们将在之后的篇幅进行详细一点的介绍。

运行时数据区(Runtime Data Area)

Java虚拟机在运行程序的过程中会把它所管理的内存划分为若干个不同的数据区,上图“JVM Architecture”中,基于内存是否能被线程所共享,内存被分为了蓝色和白色两大块区域,蓝色区域表示所有线程都会向此区域读写数据,白色区域表示这些区域是线程私有的,每条线程都有自己的虚拟机栈、本地方法栈、程序计数器,各条线程之间的栈和计数器相互隔离。它们之间的关系可以表示为下图:


运行时数据区

各数据区的作用将在下一个章节开始详细介绍。

执行引擎(Execution Engine)

执行字节码指令,该区域包括解释器、编译器和垃圾回收器


执行引擎
  • 解释器:解释器更快地解释字节码,但执行缓慢。解释器的缺点是当一个方法被调用多次时,每次都需要一个新的解释
  • JIT编译器:JIT编译器消除了解释器的缺点。执行引擎将在转换字节码时使用解释器的帮助,但是当它发现重复的代码时,将使用JIT编译器,它编译整个字节码并将其更改为本地代码。这个本地代码将直接用于重复的方法调用,这提高了系统的性能
  • 垃圾收集器:收集和删除未引用的对象,来释放内存空间。

本地库接口(Native Interface)

提供一个标准的方式让Java程序通过虚拟机与原生代码进行交互,这也就是我们平常常说的Java本地接口(JNI——Java Native Interface)。它使得在 JVM 内部运行的Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行互操作。JNI最重要的好处是它没有对底层 Java 虚拟机的实现施加任何限制。因此,Java虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对JNI的支持。程序员只需编写一种版本的本地应用程序或库,就能够与所有支持JNI 的Java 虚拟机协同工作。

本地方法库(Native Libraires)

它是执行引擎所需的本机库的集合


本篇仅从整体上介绍了一下JVM的体系结构,后续章节我们将重点了解JVM的运行时数据区,包括垃圾回收机制。


上一篇:理解JVM(1)- JVM是什么
下一篇:理解JVM(3)- 运行时数据区

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,697评论 3 83
  • 《深入理解Java虚拟机》笔记_第一遍 先取看完这本书(JVM)后必须掌握的部分。 第一部分 走近 Java 从传...
    xiaogmail阅读 5,152评论 1 34
  • JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: ...
    光剑书架上的书阅读 2,560评论 2 26
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,360评论 11 349
  • 想了半天,却也写不出什么。刚出去了一下,下了点雨,不是很大,淅淅沥沥,淋到身上也不觉得冷,到很凉爽。回来用手机看天...
    布达拉的弓阅读 110评论 0 0