java虚拟机_Oracle独家: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 语言特性,写出简洁高效的代码,并掌握诊断手法和调优方式。同时,我也会讲到 Orcale GraalVM 黑科技,让大家了解到前沿技术热点,比如编译器 Graal、语言实现框架 Truffle 等待。不管你是在准备面试、还是想进阶 Java,Java 虚拟机绝对是一把助力的利剑。
一、Java 虚拟机新手入门
虽然我们和语言朝夕相处,但不少人提及代码的详细运行过程也难免会一时语塞。这都是由于 Java 虚拟机封装得太好,让使用者几乎感觉不到它的存在,也导致不少初学者学习 Java 虚拟机时摸不着头脑,找不到脉络。
Java 虚拟机的基本原理及运行机制,对于初学者来说,是必须要掌握的,至少我是这么要求的。不然根基不牢,何来平地高楼起。
所以我也花了一整个模块的篇幅来逐次介绍 Java 虚拟机的设计决策以及工程实现,让大家在学习 Java 虚拟机时,可以知其然,也要知其所以然。
以下是专栏里的部分原理内容,大家对照着,看看是否已掌握。
Java 代码有很多种运行方式,那 Java 虚拟机具体是怎样运行 Java 字节码的?[第 1 讲 | Java 代码是怎么运行的?]
boolean 在 Java 虚拟机是以整数形式表示的 --0 代表 false,1 代表 true。那么 2 又代表什么呢?为什么要这样设计?[第 2 讲 | Java 的基本类型]
都说反射慢,究竟为什么慢?[第 7 讲 | JVM 是如何实现反射的?]
垃圾回收的原理是什么?如何优化? [第 11 讲 | 垃圾回收]
Java 内存模型是在解决什么疑难杂症? [第 13 讲 | Java 内存模型]
二、进阶 Java 虚拟机
告别了 GRUD 研究员,如果你想再进一步进阶,那么以下是知识点是你必须要掌握的。弄懂了这些,你基本上掌握了面试官 80% 的问题。
怎么判定对象已经“死去”?垃圾回收的原理是什么? [第 11 讲 | 垃圾回收(上)]
Java 虚拟机的堆是如何划分的? [第 12 讲 | 垃圾回收(下)]
Java 内存模型是在解决什么疑难杂症? [第 13 讲 | Java 内存模型]
如何用红绿灯类比 Java 虚拟机中的各项锁优化?[第 14 讲 | Java 虚拟机是怎么实现 synchronized 的?]
即时编译器有哪些优化?[第 16 讲 | 即时编译(上) ]
即时编译器应用了哪些面向循环的编译优化?[第 25 讲 | 循环优化]
JVM 垃圾回收算法
当然,我希望大家能系统学习 Java 虚拟机,而不是为了面试去刷题。更要的是希望这个专栏能激发出大家学习 Java 虚拟机乃至其他底层工作、前沿工作的热情。
就像我开设这个专栏一样,为不辜负大家的信任,我几乎每篇专栏都会大量阅读 HotSpot 的源代码,和同事讨论实现背后的设计理念,在这个过程中,我也发现了一些 HotSpot 中的 Bug,或者年久失修的代码,又或者是设计不合理的地方。苦中有乐,忙碌中又有惊喜。
《深入拆解 Java 虚拟机》3 月 20 日(3 天后)起涨价至¥99,限时拼团¥58
三、Java 虚拟机高手
在我的专栏中,有一条令我印象颇深的留言,讲的是他如何解决反射调用效率低下的问题。之所以印象深刻,是因为他的做法和 Java 虚拟机中附带的自动优化方式完全一致。换个角度来看,他其实已经具备为 Java 虚拟机设计优化的能力,也完全可以将这一优化实现回馈给 OpenJDK 社区。
举一反三,主动的解 t 决问题,且能回馈开源。这必然是高手需要具备的能力之一。
这时候大家必须去想的一个问题:如何让 Java(以及其他 Java 虚拟机语言,如 Scala、Kotlin 等)跑得更快?
主要分三个方面去考虑:
什么是虚方法调用?如何消除虚方法调用开销?[第 20 讲 | 方法内联]
Java 虚拟机是如何进行硬件加速的?[第 22 讲 |HotSpot 虚拟机的 intrinsic]
我需要手工避免 new 语句吗?[第 23 讲 | 逃逸分析]
另外,我也推荐你看看专栏里这些内容,追上 JVM 的前沿技术热点:
第 34 讲 | Graal:用 Java 编译 Java
第 35 讲 | Truffle:语言实现框架
第 36 讲 | SubstrateVM:AOT 编译框架
再之,Java 虚拟机有很多工具,需要大家熟练掌握,比如 javap-- 能够将 class 文件反汇编人类可读格式的工具;OpenJDK 项目 Code Tools-- 包含了好几个实用小工具,又或者是 ASM--Java 字节码框架等等。
在专栏里,我专门有几篇文章来介绍各类工具的使用:
如何通过注解处理器自动生成业务逻辑? [第 27 讲 | 注解处理器]
如何标准化地衡量程序性能? [第 28 讲 | 基准测试框架 JMH]
如何对 Java 虚拟机进行监控及诊断?[第 30 讲 | Java 虚拟机的监控及诊断工具(命令行篇)]
3 天倒计时福利
《深入拆解 Java 虚拟机》3 月 20 日(3 天后)起涨价至¥99,限时拼团¥58,已超过 2.2w 人加入学习,想认真进阶 Java 的同学,请抓紧搭上这趟末班车(方式:点击下图)
下面给大家截了部分读者评价,你可以参考。
可以点击看大图
额外福利:
今日参团,还可获得 Java 学习礼包:郑雨迪总结的《Java 虚拟机知识图谱》+《Java 经典图书 *6》+《Java 面试卡片》。(具体操作:将截图在后台,审核通过后立即获得链接。)
点击“”,试读或订阅
java虚拟机_Oracle独家:Java虚拟机学习指南相关推荐
- java -jar 默认参数_JAVA入门学习指南,建议收藏
如果你不懂Java 并且想认真学习接触了解一下Java的语法,建议把这篇文章收藏了,多看几遍,应该可以初步掌握Java 大部分基础的语法 . 让我们出发吧!ps:本文有点长,耐心阅读 . 〇,编程环境 ...
- java fxml教程_openjfx(javaFX)完整学习指南(教程)
openjfx(javaFX)介绍 基于JavaSE8,openjfx由几个组件构成:图形引擎Prism,窗体引擎glass,媒体引擎和一个web引擎. 欢迎大家积极开心的加入讨论群,群号:60842 ...
- 11g java 驱动_Oracle 11g Java驱动包ojdbc6.jar安装到maven库,并查看jar具体版本号
ojdbc6.jar下载 Oracle官方宣布的Oracle数据库11g的驱动jar包是ojdbc6.jar ojdbc6.jar下载地址:https://www.oracle.com/technet ...
- Java新手学习指南(2020最新推荐版)
写给入坑Java的新手程序员 Java拥有丰富且完整的生态,各类框架及工具应有尽有,系统完善的学习需花费较大精力: Java在国内互联网行业应有最为广泛,没有之一,岗位多,但是竞争也最为激烈: Jav ...
- 写给Java程序员的Java虚拟机学习指南
大家好,我是极客时间<深入拆解Java虚拟机>作者.Oracle Labs高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何Java工程师要学Java虚拟机?如何掌握Java虚拟机? ...
- Java虚拟机(JVM)与Java内存模型(JMM)学习笔记
Java虚拟机[JVM]与Java内存模型[JMM]学习笔记 Java虚拟机(JVM) 三种JVM JVM 位置 JVM的主要组成部分及其作用 类加载器 双亲委派机制 沙箱安全机制 Java本地接口( ...
- 学习笔记Hadoop(四)—— Hadoop集群的安装与部署(1)—— 虚拟机安装、java安装
一.虚拟机安装 1.1.了解一下概念 操作系统 操作系统(operation system,简称OS)是管理计算机硬件与软件资源的计算机程序.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次 ...
- 深入Java虚拟机-第二章-Java内存区域-学习笔记
Java运行时内存区域 Java虚拟机在运行Java程序的时候会将它所管理的内存区域划分为多个不同的区域.每个区域都有自己的用途,创建以及销毁的时间.有的随着虚拟机的启动而存在,有的则是依赖用户线程来 ...
- 《Java学习指南》—— 1.4 设计安全
本节书摘来异步社区<Java学习指南>一书中的第1章,第1.4节,作者:[美]Patrick Niemeyer , Daniel Leuck,更多章节内容可以访问云栖社区"异步社 ...
最新文章
- Windows窗口的建立
- SQL_Server_2005_日期和时间函数(描述及实例)
- 创建和存储 cookie
- hdu5094(上海邀请赛E) 状态压缩bfs:取钥匙开门到目的地
- Linux中压缩、解压缩(tar/zip/bzip2/gz/gzip/zip)
- Scala Akka的Actor模型
- mysql dml回滚_mysql binlog回滚/闪回,前滚, 分析各表DML情况, 找出长事务与大事务...
- Atitit 提升开发效率总结 目录 1. declara dynamic Dsl化 fp script	1 1.1. 各种语法新特性 linq等	2 1.2. duck typing。	2
- 软考软件设计师中级考试知识点(一)
- Win10安装Centos7双系统
- Arduino框架下合宙ESP32C3 +1.8“TFT液晶屏通过TFT_eSPI库驱动显示
- 提高工作效率的工具[分享]
- Logic Pro X for Mac(音乐制作软件)
- A40i使用笔记:安装python3.7(素装)
- 写点东西祭奠老师这个职业
- bzoj1615 [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
- python字符串的表示_python字符串的各种表达方式
- 微信小程序--域名配置
- 19.2. /etc/shells
- 什么是RAW文件系统?
热门文章
- [渝粤教育] 三江学院 大学生创新基础课程 参考 资料
- 【渝粤题库】陕西师范大学700002 细胞生物学
- NB-IoT在智慧城市中的应用
- 如何查看spark消耗的内存_Spark优化(三)----数据本地化及内存调优
- fpga运算服务器_一张图了解CPU、GPU、ASIC、FPGA性能、功耗效率、灵活性
- 信息技术与计算机文化的问题,信息技术与计算机文化
- OFDM仿真程序,可直接运行,注释详细(没人注释比我还详细了)
- 在PhotoShop中改像素m*n
- 从客户的角度看网站涉及的第一要素
- [LevelDB] 写批处理过程详解