![](https://img-blog.csdnimg.cn/f7d03e05365040e4816d786669da97d8.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
《深入理解Java虚拟机》读书笔记
文章平均质量分 88
深入理解java虚拟机:jvm高级特性与最佳实践》是近年来国内出版的唯一一本与java虚拟机相关的专著,也是唯一一本同时从核心理论和实际运用这两个角度去探讨java虚拟机的著作,不仅理论分析得透彻,而且书中包含的典型案例和最佳实践也极具现实指导意义。
知北游z
这个作者很懒,什么都没留下…
展开
-
《深入理解Java虚拟机》读书笔记:运行时栈帧结构
在Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统一外观(Facade)。在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选泽,也可能两者兼备,甚至还可能会包含几个不同级别的编译器执行引擎。输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果,本文将主要从概念模型的角度来讲解虚拟机的方法调用和字节码执行。原创 2023-08-23 23:14:46 · 70 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:基于栈的字节码解释执行引擎
虚拟机是如何调用方法的内容已经讲解完毕,从本节开始,我们来探讨虚拟机是如何执行方法中的字节码指令的。上文中提到过,许多Java虚拟机的执行引擎在执行Java代码的时候都有和两种选择,在本章中,我们先来探讨一下在解释执行时,虚拟机执行引擎是如何工作的。基于栈的字节码解释执行引擎。原创 2023-08-25 16:10:47 · 213 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:方法调用
方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作,但前面已经讲过,Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于之前说的直接引用)。原创 2023-08-24 22:18:20 · 114 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记: 类加载器
类加载器虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。类加载器可以说是Java语言的一项创新,也是Java语言流行的重要原因之一,它最初是为了满足Java Applet的需求而开发出来的。原创 2023-08-22 23:07:55 · 109 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记: 虚拟机类加载的时机和过程
虚拟机类加载的时机和过程。原创 2023-08-21 22:53:03 · 302 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:字节码指令简介
字节码指令简介Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构(这两种架构的区别和影响将在第8章中探讨),所以大多数的指令都不包含操作数,只有一个操作码。字节码指令集是一种具有鲜明特点、优劣势都很突出的指令集架构,由于限制了Java虚拟机操作码的长度为一个字节(即0~255),这意味着指令集的操作码总数不可能超过256条;原创 2023-08-17 22:32:59 · 57 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:Class类文件的结构
Class类文件的结构Sun公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的的程序存储格式——字节码(ByteCode),从而实现了程序的“一次编写,到处运行”。Java虚拟机提供的语言无关性“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息。使用Java编译器可以把Java代码编译为存储字节码的Class文件。原创 2023-08-15 18:52:32 · 60 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:虚拟机性能监控与故障处理工具
虚拟机性能监控与故障处理工具。原创 2023-08-14 21:56:03 · 50 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:内存分配策略
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。关于回收内存这一点,我们已经使用了大量篇幅去介绍虚拟机中的垃圾收集器体系以及运作原理,现在我们再一起来探讨一下给对象分配内存的那点事儿。对象的内存分配,往大方向讲,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。原创 2023-08-13 21:45:43 · 47 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:垃圾收集器
G1(Garbage-First)收集器,追求停顿时间、多线程GC、面向服务端应用。整体来看基于标记-整理和局部来看基于复制算法合并。它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们都是一部分Region(不需要连续)的集合。原创 2023-08-12 22:07:36 · 42 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:HotSpot的算法实现
HotSpot的算法实现概要。原创 2023-08-11 15:01:19 · 44 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:垃圾收集算法
由于垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此本节不打算过多地讨论算法的实现,只是介绍几种算法的思想及其发展过程。转存失败重新上传取消垃圾收集算法概要。原创 2023-08-10 23:21:01 · 51 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:对象已死吗?
本节内容的概要如下:对象已死吗?原创 2023-08-05 01:20:03 · 56 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:HotSpot虚拟机对象探秘
选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。因此,在使用Serial、ParNew等带Compact过程的收集器时,系统采用的分配算法是指针碰撞,而使用CMS这种基于Mark-Sweep算法的收集器时,通常采用空闲列表。这两种对象访问方式各有优势:使用句柄来访问的最大好处就是reference中存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本身不需要修改。原创 2023-08-04 22:05:04 · 63 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记:Java内存区域
Java内存区域包含程序计数器、虚拟机栈、本地方法栈、Java堆、方法区五个区域。原创 2023-08-03 18:30:02 · 54 阅读 · 0 评论