![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《深入理解Java虚拟机(第2版)》阅读笔记
文章平均质量分 79
小马王_
用脑子思考
展开
-
深机笔记 - 01《Java虚拟机规范(JavaSE7版)》运行时数据区域
《Java虚拟机规范(JavaSE7版)》规定Java虚拟机管理的内存包括以下几个运行时数据区域: 1. 程序计数器线程私有,内存空间较小,可看做当前线程执行字节码(分支、循环、跳转、异常处理、线程恢复)的行号指示器若执行Java方法则计数器记录字节码指令地址,若执行Native方法则计数器为Undefined无OutOfMamaryError情况 2.原创 2017-07-10 11:21:01 · 1324 阅读 · 0 评论 -
深机笔记 - 07 内存分配规则
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》3.6节普遍的内存分配规则:1. 优先在新生代Eden区分配。Eden区无足够空间时,发起一次Minor GC(新生代GC)2. 大对象直接进入老年代。避免Eden、Survivor间发生大量复制3. 长期存活的对象将进入老年代。对象在Survivor“熬过”一次Minor GC年龄加1,当年龄达到阈原创 2017-07-12 18:57:33 · 347 阅读 · 0 评论 -
深机笔记 - 14 运行时栈帧结构
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》8.2节不同的虚拟机实现在执行Java代码时可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择栈帧(Stack Frame)用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机栈(Virtual Machine Stack)的栈元素存储方法的局部变量表、操作数栈、动原创 2017-08-02 17:21:19 · 406 阅读 · 0 评论 -
深机笔记 - 15 方法调用
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》8.2节方法调用不等同于方法执行,方法调用阶段唯一任务是确定被调用方法的版本(即调用哪一个方法),不涉及方法内部具体运行过程Class文件编译过程不包含连接步骤,方法调用在Class文件中存储的是符号引用,不是方法实际运行时内存布局入口地址(相当于直接引用)该特性给Java带来更强大的动态扩展能力,但也使Java方法原创 2017-08-03 16:05:29 · 299 阅读 · 0 评论 -
深机笔记 - 16 动态类型语言支持
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》8.3.3节动态类型语言关键特征是,类型检查主体过程是在运行期而不是编译期JDK1.7实现JSR-292,新加入java.lang.invoke包,该包主要目的是在依靠符号引用确定目标方法以外,提供一种新的动态确定目标方法的机制,称MethodHandle拥有MethodHandle后,Java语言拥有类似函数指针或原创 2017-08-04 14:01:52 · 473 阅读 · 0 评论 -
深机笔记 - 13 类加载器
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》7.4节每个类加载器,都拥有一个独立的类名称空间对于任意类,需要由加载它的类加载器和该类本身一同确立其在Java虚拟机中的唯一性比较两个类是否“相等”,只有在两个类是由同一个类加载器加载的前提下才有意义在Java虚拟机角度只存在两种类加载器:1. 启动类加载器(Bootstrap ClassLoade原创 2017-07-27 15:16:47 · 281 阅读 · 0 评论 -
深机笔记 - 21 编译优化技术
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》11.3节最具代表性的4项优化技术:1. 语言无关的经典优化技术之一:公共子表达式消除普遍应用于各种编译器的经典优化技术若一个表达式E已经计算过,且从先前计算到现在E中所有变量值都未发生变化,则E的这次出现就成为了公共子表达式对于公共子表达式,无必要再花时间进行计算,只需使用前面计算过的表达式结果代替E即可原创 2017-08-11 18:48:46 · 430 阅读 · 0 评论 -
深机笔记 - 17 基于栈的字节码解释解释执行引擎
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》8.4节解释执行上图中:下边那条分支,是传统编译原理中程序代码到目标机器代码的生成过程中间那条分支,是解释执行过程词法分析、语法分析以至后面的优化器、目标代码生成器选择独立于执行引擎,形成一个完整意义的编译器实现,这类代表是C/C++语言把其中一部分步骤(如生成抽象语法树之前的步骤)实现为原创 2017-08-04 18:38:48 · 311 阅读 · 0 评论 -
深机笔记 - 18 Javac编译器
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》10.2节下文提及的实现类全部是Javac源码中的实现类编译过程可3个过程:1) 解析与填充符号表2) 插入式注解处理器的注解处理3) 语义分析与字节码生成Javac编译动作入口是com.sun.tools.javac.main.JavaCompiler类,上述3个过程代码逻辑集中在该类compi原创 2017-08-06 22:07:54 · 433 阅读 · 0 评论 -
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)周志明 著》阅读笔记目录(已完结)
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》阅读笔记目录:01《Java虚拟机规范(JavaSE7版)》运行时数据区域02 HotSpot虚拟机内存中对象的布局03 确定对象已死的2种算法04 Java的4种引用概念05 垃圾收集算法06 垃圾收集器07 内存分配规则08 虚拟机性能监控及故障处理工具09 Class类文件的结构10原创 2017-08-03 16:20:49 · 2549 阅读 · 0 评论 -
深机笔记 - 20 HotSpot虚拟机内的即时编译器
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》11.2节如无特殊说明,本章提及的HotSpot、虚拟机指HotSpot虚拟机,编译器、即时编译器指HotSpot虚拟机内的即时编译器热点代码和JIT编译器Java程序最初通过解释器(Interpreter)进行解释执行,虚拟机发现某个方法或代码块运行特别频繁时,会把这些代码认定为“热点代码”(Hot Spot Co原创 2017-08-08 15:26:38 · 909 阅读 · 0 评论 -
深机笔记 - 12 类的加载过程
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》7.3节类的生命周期:加载、验证、准备、初始化和卸载5个阶段必须按顺序开始,不一定按顺序进行、结束这些阶段通常是交叉进行的(在一个阶段执行过程中调用、激活另外一个阶段)解析阶段在某些情况下可在初始化阶段后开始,目的是为了支持Java语言的运行时绑定(也称动态绑定、晚期绑定)1. 加载1)通原创 2017-07-21 18:48:48 · 407 阅读 · 0 评论 -
深机笔记 - 02 HotSpot虚拟机内存中对象的布局
2.3.2节HorSpot虚拟机内存中对象的布局包括:对象头(Header)、实例数据(InstanceData)、对齐填充(Padding)1.对象头包括两部分信息1.1. Mark Word非固定数据结构,32、64位的虚拟机(未开启压缩指针)中长度分别为32、64bit存储对象自身运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程原创 2017-07-10 18:01:50 · 354 阅读 · 0 评论 -
深机笔记 - 03 确定对象已死的2种算法
3.2节1.引用计数算法算法思路:给对象添加引用计数器,有引用时加1,引用失效时减1,计数器为0,对象不可用实现简单,判定效率高,但主流Java虚拟机没有选用,主要原因是它很难解决对象之间相互循环引用问题2.可达性分析算法基本思路:将"GC Roots"对象作为起始点,从起始点开始向下搜索,搜索经过的路径称为引用链(ReferenceChain),没有与任何引用链相原创 2017-07-10 18:30:13 · 378 阅读 · 0 评论 -
深机笔记 - 04 Java的4种引用概念
3.2.3节JDK1.2后,Java将引用分为强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)、虚引用(PhantomReference),4种引用强度依次逐渐减弱1.强引用:程序代码中普遍存在、类似"Objectobj=newObject()"的引用只要强引用还存在,垃圾收集器永远不会回收被引用的对象原创 2017-07-10 18:52:57 · 301 阅读 · 0 评论 -
深机笔记 - 05 垃圾收集算法
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》3.3节1.“标记-清除”(Mark-Sweep)算法最基础的收集算法,后续收集算法基于此算法的思路对其不足进行改进得到分“标记”、“清除”两阶段:首先标记出所有需要回收的对象(如何标记见 深机笔记 - 03 确定对象已死的2种算法)标记完成后统一回收被标记的对象两个主要不足:效率问题,标记和清除两个过程原创 2017-07-11 14:46:15 · 322 阅读 · 0 评论 -
深机笔记 - 06 垃圾收集器
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》3.5节这里讨论的收集器基于JDK1.7 Update14之后的HotSpot虚拟机(正式提供商用G1收集器)下图展示7种作用于不同分代的收集器所处区域表示属于新或老年代收集器若两收集器间有连线,则说明它们可搭配使用没有最好的收集器,只有对具体应用最合适的收集器1. Serial收集器新生代“原创 2017-07-12 15:07:33 · 612 阅读 · 0 评论 -
深机笔记 - 08 虚拟机性能监控及故障处理工具
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》4章本章介绍的工具基于Windows平台下JDK1.6 Update 21JDK1.5需手动开启JMX,JDK1.6默认开启这些工具大多是jdk/lib/tools.jar类库的一层薄包装命令行工具:1. jps(JVM Process Status Tool)虚拟机进程状况工具,输入LVMID以确定原创 2017-07-13 21:48:19 · 394 阅读 · 0 评论 -
深机笔记 - 09 Class类文件的结构
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》6.3节本文关于Class文件结构以《Java虚拟机规范(第2版)》(1999年发布,对应JDK1.4时代Java虚拟机)中的定义为主线一个Class文件对应唯一一个类或接口定义信息但类或接口并不一定都定义在文件里(譬如类或接口也可以通过类加载器直接生成)本文中的“Class文件”并不一定都以磁盘文件的形式存在原创 2017-07-16 15:25:35 · 544 阅读 · 0 评论 -
深机笔记 - 11 类加载的时机
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》7.2节类的生命周期:加载、验证、准备、初始化和卸载5个阶段必须按顺序开始,不一定按顺序进行、结束,这些阶段通常是交叉进行的(在一个阶段执行过程中调用、激活另外一个阶段)解析阶段在某些情况下可在初始化阶段后开始,目的是为了支持Java语言的运行时绑定(也称动态绑定、晚期绑定)有且只有5种情况必须立原创 2017-07-17 22:41:43 · 231 阅读 · 0 评论 -
深机笔记 - 10 字节码指令简介
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》6.4节长度:1个字节总数:面向:操作数栈,而非寄存器对齐:操作数长度不对齐操作码助记符:i代表int,l代表long,s代表short,b代表byte,c代表char,f代表float,d代表double,a代表referencearraylength指令,无操作码助记符,但操作数永远只能数组原创 2017-07-17 17:44:22 · 559 阅读 · 0 评论 -
深机笔记 - 19 Java语法糖的味道
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》10.3节语法糖不会提供实质性功能改进,但或能提高效率、提升语法严谨性、减少编码出错机会泛型与类型擦除泛型是JDK1.5新增特性,本质是参数化类型(Parametersized Type)的应用,即数据类型被指定为参数这种参数类型可用在类、接口和方法的创建中,分别称泛型类、泛型接口和泛型方法泛型技术在原创 2017-08-07 13:15:58 · 508 阅读 · 2 评论