Jvm虚拟机(一)-基础结构-图文总结
近期开始进行一些编程经典的书籍阅读,单看书很难理解,所以把一些相对重点东西梳理出来,以思维导图的形式来整理。我阅读的是《深入理解虚拟机》(第3版)。
Graal VM
开篇讲解了Java的历史,JDK的版本历程,还有虚拟机的演变史,当然这些都是耳闻能详的。在第三版提到了一个Graal VM比较有意思,他是2018年4月,Oracle Labs新公开了一项黑科技:Graal VM,如图1-4所示,从它的口号“Run Programs Faster Anywhere”就能感觉到一颗蓬勃的野心,这句话显然是与1995年Java刚诞生时的“Write Once,Run Anywhere”在遥相呼应。Graal VM被官方称为“Universal VM”和“Polyglot VM”,这是一个在HotSpot虚拟机基础上增强而成的跨语言全栈虚拟机,可以作为“任何语言”的运行平台使用,这里“任何语言”包括了Java、Scala、Groovy、Kotlin等基于Java虚拟机之上的语言,还包括了C、C++、Rust等基于LLVM的语言,同时支持其他像JavaScript、Ruby、Python和R语言等。
Oracle Labs的研究总监Thomas Wuerthinger在接受InfoQ采访时谈到:“随着GraalVM 1.0的发布,我们已经证明了拥有高性能的多语言虚拟机是可能的,并且实现这个目标的最佳方式不是通过类似Java虚拟机和微软
CLR那样带有语言特性的字节码。
HotSpot虚拟机中含有两个即时编译器,分别是编译耗时短但输出代码优化程度较低的客户端编译器(简称为C1)以及编译耗时长但输出代码优化质量也更高的服务端编译器(简称为C2),通常它们会在分层编译机制下与解释器互相配合来共同构成HotSpot虚拟机的执行子系统自JDK 10起,HotSpot中又加入了一个全新的即时编译器:Graal编译器,今天的Graal编译器尚且年幼,还未经过足够多的实践验证,所以仍然带着“实验状态”的标签,需要用开关参数去**,使用-XX:+UnlockExperimentalVMOptions-XX:+UseJVMCICompiler参数来启用Graal编译器。
有兴趣的后续可以关注些这个VM。
Java虚拟机运行时数据区
这里的虚拟机通常是我们说的HotSpot虚拟机。
堆(Heap)
方法区(Method Area)
运行时常量池(Runtime Constant Pool)
class文件
虚拟机栈(VM Stack)
栈帧(Stack Frame)
本地方法栈(Native Method Stack)
程序计数器(Program Counter Register)
直接内存(Direct Memory)
总结
第一章部分直接简单的讲解了基础的虚拟机区域划分和基本内容,后续章节的阅读,也会详细的总结某一处区域知识点。又不对的地方请指出,目前书籍还在阅读中。
链接: https://pan.baidu.com/s/1v8Z3MLO11M1mn7w0GjFfJQ 密码: mt9e
xmind文件 需要的可以下载