GitHub标星85K,美团架构师带你深入解析Java虚拟机HotSpot

Java语言已经走过了20多个年头,在此期间虽然新语言层出不穷,但是都没有撼动Java的位置。可能是历史选择了Java,也可能是Java改变了历史,总之,Java无疑是一门成功的编程语言。这门语言之所以能如此成功,高性能语言虚拟机HotSpot功不可没。

客观地说,HotSpot VM是目前顶级的语言虚拟机之一,它的模板解释器是语言解释器的最终状态,除非有重大技术突破和方法论的改变,否则很难被超越。它的垃圾回收器也日臻完善,新的无停顿GC的出现标志着JVM正在迈向GC顶级俱乐部。它的即时编译器是权衡编译开销与应用吞吐量后得到的一个卓越且精湛的艺术品。

本文既考虑到内容的广度也关注了技术的深度,详细描述了虚拟机的底层实现,并与上层Java语言或者库结合,以实用为目标展开介绍,同时还讨论了它们的深刻意义。

从内容广度的角度看,本文除了讨论耳熟能详的Java虚拟机技术外,还详细讨论了业界最新的通用虚拟机平台Graal VM、CDS/AppCDS/DynamicCDS、Instrumentation库、编译重放、非标准字节码、栈上替换,RTM锁、JIT编译器IR、JIT编译器可视化工具、编译逃离、
EpsilonGC/ShenandoahGC/ZGC、G1字符串去重等技术。

限于文章篇幅原因,只能以截图的形式展示出来,有需要的小伙伴可以文末获取↓↓↓

目录总览

内容概览

本文共11章,全文从逻辑上可分为运行时、编译器、垃圾回收器三个部分。

第一部分(第1~6章),介绍Java虚拟机运行时的相关知识;

第1章Java大观园;

作为本书的开篇,本章将围绕Java的生态系统,简单介绍JDK、JVM、JEP,引导读者走进虚拟机的世界。

第2章类可用机制;

一个类需要经过漫长的旅程才能被虚拟机其他组件,如解释器、编译器、GC等在运行时使用,下面将详细介绍类的一个完整生命周期,即加载、链接、初始化三部曲。

第3章对象和类;

本章讨论Java对象和类在HotSpot VM内部的具体实现,探索虚拟机在底层是如何对这些Java语言的概念建模的。

第4章运行时;

运行时,顾名思义是指虚拟机运行的时候,它表征程序执行时的状态,本章将讨论虚拟机运行时涉及的方方面面。

第5章模板解释器;

最简单的Java虚拟机可以只包括类加载器和解释器:类加载器加载字节码iconst_1、iconst_1、iadd并传给虚拟机,解释器按照字节码计算并得到结果。在没有JIT编译器的情况下,解释器从某种程度上来说就是虚拟机本体,有关虚拟机的绝大部分问题都能在解释器中找到答案。本章将详细讨论解释器的内部构造和解释执行过程。

第6章并发设施;

并发是Java的一大特色,通过并发,可以在Java层实现多个线程协同工作或者互斥执行。上层应用的易用性、安全性、高效性都是由HotSpot VM中的并发设施来保证的。并发设施是HotSpot VM中相当复杂的组件,本章将简单讨论虚拟机在并发方面付出的努力。

第二部分(第7~9章),介绍编译基础知识和虚拟机的两个即时编译器;

第7章编译概述;

编译器是一个相对复杂且专业的领域,需要一些先验理论知识。本章将简单讨论编译理论的基本概念,也会逐一讨论HotSpot VM本身涉及的许多特设的编译技术,为后面的篇章打下理论基础。

第8章C1编译器;

C1使用经典的基于静态单赋值的两层图IR作为HIR:第一层为控制流图,用于处理控制流;第二层为基本块,用于处理数据流。C1的HIR同时含有控制流和数据流,是学习编译原理的良好实例,本章将详细讨论C1编译器(后面简称C1)。

第9章C2编译器;

C2编译器即Op to Compiler,又叫Server Compiler,它的定位与C1相反:C1面向客户端程序,需要快速响应用户请求;C2面向长期运行的服务端程序,它允许在编译上花更多时间,以此换取程序峰值执行性能。本章将详细讨论大名鼎鼎的C2编译器(后面简称C2)。

第三部分(第10~11章),介绍各种垃圾回收器并深入分析G1GC。

第10章垃圾回收;垃圾回收是JDK开发者社区最活跃的主题,在-XX:+RunReallyFast虚拟机参数没有到来之前,了解垃圾回收运行机制和工作原理对于Java开发者是很有必要的。本章将从最简单的垃圾回收器开始,逐个介绍垃圾回收器的原理和底层实现。

第11章G1GC;

G1 GC是面向服务端应用程序的垃圾回收器,通过新的堆设计和停顿预测模型,可以到达用户指定的一个比较合理的软实时目标。本章将详细分析G1 GC的设计和实现。

​限于文章篇幅原因,就展示到这里了,有需要的小伙伴可以查看下方名片↓↓↓ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值