JVM
文章平均质量分 90
Harmony_Launch
这个作者很懒,什么都没留下…
展开
-
【Java学习笔记(一百一十三)】之编译器优化(方法内联,逃逸分析,公共子表达式消除,数组边界检查)
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 编译器优化技术(一) 概述 编译器的目标是将程序代码翻译为本地机器码,输出代码优化质量的高低是决定编译器优秀与否的关键,所有的优化手段都是建立在代码的中间表示或者是机器码之上的,而不是Java源码。(二) 方法内联1. 概述 方法内联是编译器最重要的优化手段,因为除了消除方法调用的成本之外,它更重要的意义原创 2021-01-21 21:21:07 · 817 阅读 · 0 评论 -
【Java学习笔记(一百一十二)】之后端编译,即时编译器,提前编译
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 后端编译(一) 概述 将Class文件转换成二进制机器码的过程为编译过程的后端,有即时编译和提前编译两种,但是这两种编译器都不是Java虚拟机必须的组成部分。(二) 即时编译器1. 概述 最初的Java虚拟机中都是通过解释执行的,当虚拟机发现某个方法或者代码块的运行特别频繁时,会将这些代码编译成本地机器码原创 2021-01-20 22:29:53 · 434 阅读 · 0 评论 -
【Java学习笔记(一百一十一)】之 Java语法糖 泛型,类型擦除,装箱,拆箱,条件编译
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 语法糖(一) 概述 语法糖是计算机语言中添加的某种语法,这种语法对于语言的编译结果和功能没有实际影响,但是却能够方便开发者的开发。Java中的语法糖有泛型,变长参数,自动装箱拆箱等等。(二) 泛型1. 概述 泛型的本质是参数化类型,即可以将操作的数据类型指定为方法签名中的一种特殊参数,这种参数类型可以用在原创 2021-01-19 21:35:26 · 214 阅读 · 0 评论 -
【Java学习笔记(一百一十)】之 前端编译Javac编译过程解析
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 前端编译(一) 编译分类 Java的编译有三种,一种是前端编译器,将java文件转变为Class文件,如JDK的Javac;一种是Java虚拟机的即时编译器(JIT,Just In Time),在运行期将字节码转变为本地机器码,如HotSpot虚拟机的C1,C2编译器;一种是静态的提前编译器(AOT,Ahead Of Time Compiler),直接把程序编译为与目标原创 2021-01-18 21:49:16 · 509 阅读 · 0 评论 -
【Java学习笔记(一百零九)】之动态类型语言调用,invokedynamic指令,解释执行
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 动态类型语言支持(一) 概述 动态类型语言的关键特征是它的类型检查的主体过程是在运行期而不是编译期进行的。Java语言在JDK7之前通过编译将方法的符号引用作为方法调用指令的参数存储到Class文件中,这个符号引用包含了该方法定义在哪个具体类型中,方法的名字以及参数顺序,参数类型和方法返回值等信息,通过这个符号引用,Java虚拟机可以翻译出该方法的直接引用。 原创 2021-01-16 21:46:55 · 595 阅读 · 0 评论 -
【Java学习笔记(一百零八)】之JVM方法调用解析与分派
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 方法调用(一) 概述 方法调用并不等同于方法中的代码被执行,方法调用阶段的唯一任务就是确定被调用方法的版本(即调用哪一个版本)。由于Class文件的编译过程中不包含连接步骤,因此方法调用在Class文件中存储的只是符号引用,而不是方法在实际运行时内存布局中的入口地址(直接引用)。这就让Java有了更强的动态扩展能力,某些调用需要在类加载甚至运行时才能确定直接引用。(原创 2021-01-15 16:30:04 · 184 阅读 · 0 评论 -
【Java学习笔记(一百零七)】之字节码执行引擎,栈帧结构
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 字节码执行引擎(一) 概述 物理机和虚拟机都有代码执行能力,物理机的执行引擎建立在处理器,缓存机,指令集和操作系统之上,而虚拟机的执行引擎则是由软件实现的,不会受到物理条件制约地定制指令集与执行引擎的结构体系,能够执行哪些不被硬件支持的指令集格式。(二) 虚拟机实现 《规范》中制定了Java虚拟机字节码执行原创 2021-01-10 17:21:09 · 226 阅读 · 0 评论 -
【Java学习笔记(一百零四)】之类加载器和Java模块化系统
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 类加载器(一) 概述 在类加载阶段,通过一个类的全限定来获取描述该类的二进制字节流这个动作实在Java虚拟机外部实现的,以便让程序自己决定从哪里加载类,实现这个动作的代码称为类加载器。(二) 类与类加载器 任意的一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加原创 2021-01-08 11:22:35 · 297 阅读 · 0 评论 -
【Java学习笔记(一百零三)】之虚拟机类加载机制介绍
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 虚拟机类加载(一) 概述 在Class文件中描述的各类信息,最终都需要加载到虚拟机中才能够被运行和使用。虚拟机的类加载机制就是虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程。(二) Java类加载的优缺点 Java原创 2021-01-07 19:08:44 · 117 阅读 · 0 评论 -
【Java学习笔记(一百)】之JVM字节码指令介绍
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 字节码指令(一) 指令的组成 Java虚拟机的指令由一个字节长度的,代表着某种特定操作含义的数字(操作码),以及跟随其后的零至多个代表此操作所需的参数(操作数)构成。由于Java虚拟机采用面向操作数堆栈的架构,大多数指令都不包含操作数,只有一个操作码,操作数都存放在操作数栈中。(二) 指令的特点 限制了原创 2021-01-06 16:46:17 · 253 阅读 · 0 评论 -
【Java学习笔记(九十七)】之Class文件的无关性,Class文件结构
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 无关性(一) 概述 传统的代码编译的结果是将程序编译为二进制本地机器码,现在越来越多的程序语言选择了与操作系统和机器指令集无关的,平台中立的格式作为程序编译后的存储格式。平台中立的理想只能在操作系统以上的应用层实现,Java虚拟机可以运行在不同硬件平台和操作系统之上,这些虚拟机可以载入和执行同一种平台无关的字节码。(二) 语言无关性原创 2021-01-05 17:08:31 · 295 阅读 · 0 评论 -
【Java学习笔记(九十四)】之 经典的垃圾回收器介绍
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. Serial收集器 Serial收集器是历史最悠久的收集器,在进行垃圾收集工作时,需要暂停其他的工作线程,因此是单线程收集器,这会让用户线程产生停顿时间。迄今为止,他依然是HotSpot虚拟机运行在客户端模式下的默认新生代收集器,优点是简单高效,对于内存资源受限的环境,是所有收集器里额外内存消耗最少的,能够获得较高的收集器效率。二. ParNew收集器原创 2021-01-01 23:45:44 · 254 阅读 · 0 评论 -
【Java学习笔记(九十)】之分代收集理论,垃圾收集算法,HotSpot算法细节
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 分代收集理论(一) 假说 当前商用虚拟机的垃圾收集器大都遵循了分代收集理论进行设计,该理论建立在两个假说之上:弱分代假说和强分代假说。弱分代假说中绝大多数对象都是朝生夕灭的;强分代假说中熬过越多次垃圾收集过程的对象越难以消亡。(二) 划分区域 收集器根据这两个假说将Java堆划分出不同的区域,一个区域中的对原创 2020-12-30 22:48:13 · 407 阅读 · 0 评论 -
【Java学习笔记(八十八)】之垃圾收集,判断对象存活,引用类型,finalize方法,回收方法区
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 垃圾收集器(一) 为什么需要垃圾收集 垃圾收集的历史比Java要久很多,虽然Java虚拟机实现了自动回收内存,我们还是要学习垃圾收集。因为当我们需要排查各种内存溢出,内存泄露问题时,当垃圾收集称为高并发系统的瓶颈时,我们需要监控垃圾收集的细节并调节。 程序计数器,虚拟机栈,本地方法栈三个区域随着线程而生,随线程原创 2020-12-27 22:03:54 · 164 阅读 · 0 评论 -
【Java学习笔记(八十七)】之HotSpot虚拟机对象解析,Java内存溢出异常解析
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. 虚拟机HotSpot对象解析(一) 对象的创建1. 检查类的符号引用 Java 虚拟机遇到一个字节码new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个类是否已经加载,解析,初始化,如果没有,则首先需要加载类。2. 对象分配内存(1) 两种内存分配方式 类加载检查原创 2020-12-26 23:03:47 · 254 阅读 · 0 评论 -
【Java学习笔记(八十六)】之 JVM运行时数据区域简介
本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. Java虚拟机运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为多个不同的数据区域,这些区域有各自的用途以及创建和销毁时间。(一)程序计数器 程序计数器占用内存较少,用作当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变程序计数器的值来选取下一条要执行的字节码原创 2020-12-25 22:20:43 · 126 阅读 · 0 评论