大厂Data+Agent 秘籍:腾讯/阿里/字节解析如何提升数据分析智能。 了解详情
写点什么

写给 Java 程序员的 Java 虚拟机学习指南

  • 2019-03-14
  • 本文字数:2190 字

    阅读完需:约 7 分钟

写给Java程序员的Java虚拟机学习指南

大家好,我是极客时间《深入拆解Java虚拟机》作者、Oracle Labs 高级研究员郑雨迪。有幸借这个专题的机会,能和大家分享为何 Java 工程师要学 Java 虚拟机?如何掌握 Java 虚拟机?

工欲善其事,必先利其器

“为什么学 Java 虚拟机”这个问题,就和“为什么要学习数据结构和算法”是一个道理:工欲善其事,必先利其器。


我总结了三点必须要学好 Java 虚拟机的理由:


  • Java 已然是一门主流的工程语言,拥有大量的应用。作为 Java 语言的执行引擎,Java 虚拟机的调优一直是热点话题,成为各大厂面试的压轴题。

  • 此外,主流的 Java 虚拟机–也就是 OpenJDK 的 HotSpot VM–是完全开源的。只要读得懂 C++代码,便能够绕开网络上的“二手”资料,直面 Java 实现的核心逻辑。

  • Java 在不断地增添新特性、新功能,其中不少都“借鉴”自其他编程语言。同样,通过学习 Java 虚拟机,在遇到其他语言实现时也能够触类旁通,迅速地完成调优、排错工作。


另外,我注意到国内大厂不再只满足于使用开源项目,而是积极参与这些项目的开发。例如 Alibaba 在去年便已成为 OpenJDK 项目执行委员会的一员,可以左右 Java 语言的发展。一旦越来越多的大厂加大对底层、对这些开源项目的投入,势必会产生许多对高精尖技术专家的需求。


所以,作为一名 Java 程序员,在尽情享受 Java 虚拟机带来好处的同时,你还应该去了解和思考“这些技术特性是如何实现的”,去了解最底层的原理。只有熟悉 JVM,你才能在遇到 OutOfMemory 等异常时,不会束手无策,不会一脸懵逼的上网找解决办法,最后就算改了几个启动参数解决了问题,也还是云里雾里。


那该如何揭开 Java 虚拟机迷雾,深入底层,将 Java 虚拟机拿下?我分为 3 个阶段来分享,每个阶段大家又该具备哪些技能?


先附上一张我制作的「Java 虚拟机知识框架图」,涵盖了 Java 虚拟机的所有学习要点,建议保存。



一、Java 虚拟机新手入门


虽然我们和语言朝夕相处,但不少人提及代码的详细运行过程也难免会一时语塞。这都是由于 Java 虚拟机封装得太好,让使用者几乎感觉不到它的存在,也导致不少初学者学习 Java 虚拟机时摸不着头脑,找不到脉络。


Java 虚拟机的基本原理及运行机制,对于初学者来说,是必须要掌握的,至少我是这么要求的。不然根基不牢,何来平地高楼起。


所以我也花了一整个模块的篇幅来逐次介绍 Java 虚拟机的设计决策以及工程实现,让大家在学习 Java 虚拟机时,可以知其然,也要知其所以然。


以下是专栏里的部分原理内容,大家对照着,看看是否已掌握。


Java 代码有很多种运行方式,那 Java 虚拟机具体是怎样运行 Java 字节码的?[第1讲 | Java代码是怎么运行的?]


boolean 在 Java 虚拟机是以整数形式表示的–0 代表 false,1 代表 true。那么 2 又代表什么呢?为什么要这样设计?[第2讲 | Java的基本类型]


二、进阶 Java 虚拟机


告别了 GRUD 研究员,如果你想再进一步进阶,那么以下是知识点是你必须要掌握的。弄懂了这些,你基本上掌握了面试官 80%的问题。


怎么判定对象已经“死去”?垃圾回收的原理是什么? [第11讲 | 垃圾回收(上)]


Java 虚拟机的堆是如何划分的? [第12讲 | 垃圾回收(下)]


当然,我希望大家能系统学习 Java 虚拟机,而不是为了面试去刷题。更要的是希望这个专栏能激发出大家学习 Java 虚拟机乃至其他底层工作、前沿工作的热情。


就像我开设这个专栏一样,为不辜负大家的信任,我几乎每篇专栏都会大量阅读 HotSpot 的源代码,和同事讨论实现背后的设计理念,在这个过程中,我也发现了一些 HotSpot 中的 Bug,或者年久失修的代码,又或者是设计不合理的地方。苦中有乐,忙碌中又有惊喜。


三、Java 虚拟机高手


在我的专栏中,有一条令我印象颇深的留言,讲的是他如何解决反射调用效率低下的问题。之所以印象深刻,是因为他的做法和 Java 虚拟机中附带的自动优化方式完全一致。换个角度来看,他其实已经具备为 Java 虚拟机设计优化的能力,也完全可以将这一优化实现回馈给 OpenJDK 社区。


举一反三,主动的解决问题,且能回馈开源。这必然是高手需要具备的能力之一。


这时候大家必须去想的一个问题:如何让 Java(以及其他 Java 虚拟机语言,如 Scala、Kotlin 等)跑得更快?


主要分三个方面去考虑:


什么是虚方法调用?如何消除虚方法调用开销?[第20讲 | 方法内联]


Java 虚拟机是如何进行硬件加速的?[第22讲 | HotSpot虚拟机的intrinsic]


我需要手工避免 new 语句吗?[第23讲 | 逃逸分析]


再之,Java 虚拟机有很多工具,需要大家熟练掌握,比如 javap–能够将 class 文件反汇编人类可读格式的工具;OpenJDK 项目 Code Tools–包含了好几个实用小工具,又或者是 ASM–Java 字节码框架等等。


在专栏里,我专门有几篇文章来介绍各类工具的使用:


如何通过注解处理器自动生成业务逻辑? [第27讲 | 注解处理器]


如何标准化地衡量程序性能? [第28讲 | 基准测试框架]


作者介绍


郑雨迪,甲骨文实验室(Oracle Labs)的高级研究员,主要负责研究如何通过程序分析技术以及动态编译技术让程序语言跑得更快。同时,也是全栈虚拟机 Graal 编译器的核心开发者之一,在为 HotSpot 虚拟机项目添砖加瓦。


通过学习《深入拆解 Java 虚拟机》,你将获得:


  • Java 工程师进阶加薪必修课

  • 4 大模块全方位拆解 JVM

  • 帮助你编写高效 Java 代码

  • 揭秘 Oracle 最新的 Java 黑科技


戳此订阅:《深入拆解Java虚拟机》这个专栏涨价倒计时最后 5 天,从 68 元直接涨到 99 元,现参团只要 58 元。


2019-03-14 15:425012

评论

发布
暂无评论
发现更多内容

当三位神话人物,穿越到智能视频新视界……

白洞计划

AI 音视频

如何让数据清洗工作变得简单

RestCloud

数据同步 ETL 数据清洗 数据集成平台

干货分享|工作8年,我的职场成长笔记

京东零售技术

技术成长

一个挑战与万种答案:OPPO智慧服务的时代之桥

脑极体

AI

用Python激发文案创作灵感:文心一言API的智能应用

幂简集成

AI API 文心一言

做效能度量遇到领导质疑怎么办?

思码逸研发效能

DevOps 研发效能 效能度量 研发管理软件

怎么提升国外服务器访问速度?实用技巧分享

Ogcloud

网络加速 国外服务器 服务器加速

5大提升工作效率的桌面软件,深度评测!

秃头小帅oi

低代码突破:工业领域应用的潜力与难题解析!

不在线第一只蜗牛

低代码

复旦大学全球供应链研究中心揭牌,合合信息共话大数据赋能

合合技术团队

大数据‘’

StarRocks Lakehouse 快速入门——Hive Catalog

StarRocks

数据库 hive LakeHouse

图解LinkedListQueue数据结构设计与应用案例

肖哥弹架构

Java 容器 数据结构

当三位神话人物,穿越到智能视频新视界……

脑极体

AI

《使用Gin框架构建分布式应用》阅读笔记:p77-p87

codists

Go gin 编程人

理解 Spring Boot

我爱娃哈哈😍

微服务 spring-boot

Spring Boot 的执行器是什么?

我爱娃哈哈😍

微服务 执行器 spring-boot

计划建设数据中台前,这些问题要提前考虑

Aloudata

数据中台 数据仓库 数据虚拟化 noetl

1017关键词 | Nvidia模型超越GPT-4 | 全模态框架发布 | ChatGPT访问量超必应

言寡意多

传奇服务器遭遇袭击,广大玩家需密切关注

网络安全服务

服务器 DDoS 带宽 传奇

兰迪·舍克曼担任生命银行链(LBC)顾问,赋能基因数据技术发展

股市老人

写给Java程序员的Java虚拟机学习指南_语言 & 开发_郑雨迪_InfoQ精选文章