清华毕业大牛带你深入解析 JVM,附五大实战技术文档,总计 1024M
前言
JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
引入 Java 语言虚拟机后,Java 语言在不同平台上运行时不需要重新编译。Java 语言使用 Java 虚拟机屏蔽了与具体平台相关的信息,使得 Java 语言编译程序只需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
JVM 特性
移植性,无论是 GC 还是 Hotspot 都可以用在任何 Java 可用的地方。比方说,JRuby 可以运行在其他平台上,Rails 应用就可以运行在 IBM 主机上的 JRuby 上,而且这台 IBM 主机运行的是 CP/CMS.实际上,由于 Java 和 OpenJDK 项目的开源,我们正在看到越来越多的平台的衍生,因此 JVM 的移植性也将越来越棒。
成熟,JVM 已有多年的历史,在过去的这些年里,许多开发者为它做出了许多贡献,使得它的性能一次又一次地提升,让 JVM 变得更加稳定、快速和广泛。
覆盖面,JRuby 和 JVM 上的其他语言项目已经被承认,一个例子是 invokedynamic specification(akaJSR292)。JSR 越来越配合新的语言,JVM 已不再是 Java 一个人定制规则。JVM 正在构建成为类如 JRuby 等项目的优良平台。还有一个 MLVM(multiple languageVM)项目,好比是新特性的清算机构,是一个许多企业应用的开发者试图添加应用的地方,而这些应用正是他们想在 JVM 中看到的。而且 JVM 开发者互相协作、彼此影响,无疑这有利于 JVM 新特性的诞生。这些细节都可以看到 JVM 正在关注开发者的需求,扩大他的覆盖面。
JVM 学习路线
——【传送门免费货区】
JVM 五大学习技术文档
一、深入理解 Java 虚拟机:JVM 高级特性与最佳实践
本篇一共分为五个部分:走近 Java、自动内存管理、虚拟机执行子系统、程序编译与代码优化、高效并发。各个部分之间基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分各个章节间则有先后顺序。
这里并没有假定所有读者都在 Java 领域具备特别专业的技术水平,因此会在保证逻辑完整、描述准确的前提下,尽量用通俗的语言和案例去讲述虛拟机中与开发关系最为密切的内容。但是,本篇毕竟是在探讨虚拟机的工作原理,不可避免地需要读者有一定的技术基础,而且本书的读者定位是中、高级程序员群体,对于一些常用的开发框架、Java 类库 API 和 Java 语法等基础知识点,将假设读者已有所了解。
本篇介绍的 Java 虛拟机并不局限于某一个特定发 行商或者某一款特定虚拟机,只是由于 OracleJDK/OpenJDK 在市场占有率上的绝对优势,其中的 HotSpot 虚拟机不可避免地成为本篇主要分析、讲解的对象,在涉及 Java 虚拟机自身实现相关的内容时,大多将以 HotSpot 虚拟机为目标对象来进行讲解。但撰写本篇的意图并不是去做 HotSpot 的源码导读或者解析,所讲述的内容多为 Java 虚拟机的通用原理,即使读者使用了 HotSpot 之外的其他 Java 虚拟机实现,也会有所收获。
二、揭秘 Java 虚拟机-JVM 设计原理与实现
本篇从源码角度解读 HotSpot 的内部实现机制,本版本主要包含三大部分- JVM 数据结 构设计与实现、执行引擎机制及内存分配模型。
数据结构部分包括 Java 字节码文件格式、常量池解析、字段解析、方法解析。每一部分都给出详细的源码实现分析,例如字段解析一章,从源码层面详细分析了 Java 字段重排、字段继承等关键机制。再如方法解析一章,给出了 Java 多态特性在源码层面的实现方式。本书通过直接对源代码的分析,从根本上梳理和澄清 Java 领域中的关键概念和机制。
执行引擎部分包括 Java 方法调用机制、栈帧创建机制、指令集架构与解释器实现机制。这一话题是全篇技术含量最高的部分,需要读者具备一定的汇编基础。不过千万不要被“汇编”这个词给吓着,其实在作者看来,汇编相比于高级语言而言,语法非常简单,语义也十分清晰。执行引擎部分重点描述 Java 源代码如何转换为字节码,又如何从字节码转换为机器指令从而能够被物理 CPU 所执行的技术实现。同时详细分析了 Java 函数堆栈的创建全过程,在源码分析的过程中,带领读者从本质上理解到底什么是 Java 函数堆栈和栈帧,以及栈帧内部的详细结构。
内存分配部分主要包括类型创建与加载、对象实例创建与内存分配,例如 new 关键字的工作机制,import 关键字的作用,再如 java.lang.ClassL oader.loadClass()接口的本地实现机制。
三、JVM 实战书籍
本篇一共分为五个部分:走近 Java、自动内存管理、虚拟机执行子系统、程序编译与代码优化、高效并发。各个部分之间基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分各个章节间则有先后顺序。
本篇并不假设读者在 Java 领域具备很专业的技术水平,因此在保证逻辑准确的前提下,尽量用通俗的语言和案例讲述虚拟机中与开发关系最为密切的内容。当然学习虚拟机技术本身就需要读者有一定的技术基础,且本书的读者定位是中、高级程序员,因此本书假设读者自己了解一些常用的开发框架、Java API 和 Java 语法等基础知识。
四、JVM20 道面试专题及答案
20.简述 java 内存分配与回收策略以及 Minor GC 和 Major GC
1. 对象优先在堆的 Eden 区分配。
2. 大对象直接进入老年代.
3. 长期存活的对象将直接进入老年代.
当 Eden 区没有足够的空间进行分配时,虚拟机会执行一次 Minor GC.Minor Gc 通常发生在新生代的 Eden 区,在这个区的对象生存期短,往往发生 Gc 的频率较高,回收速度比较快;Full Gc/Major GC 发生在老年代,一般情况下,触发老年代 GC 的时候不会触发 Minor GC,但是通过配置,可以在 Full GC 之前进行一次 MinorGC 这样可以加快老年代的回收速度。
五、JVM 与性能优化知识点整理
一、 JVM 内存区 域划分
1.程序计数器(线程私有)
2.Java 栈(线程私有)
3.本地方法栈(线程私有)
4.堆(线程共享)
5.方法区(线程共享)
6.直接内存(线程共享)
二、JVM 执行子系统
三.垃圾回收器和内存分配策略
1.Java 中是值传递还是引用传递?
2.引用类型
3.基本垃圾回收算法
4.分代处理垃圾
5.JAVA 中垃圾回收 GC 的类型
四、编写高效优雅 Java 程序
1.面向对象
2.方法
3.通用程序设计
五、性能优化
1.常用的性能评价/测试指标
2.常用的性能优化手段
3 应用服务性能优化
’3.2 异步
3.3 集群
3.4 应用相关
评论