摘要:
特别说明:本篇侧重理论,涉及的定义和结论,都是基于Java虚拟机规范定义或者由规范推导出来。因此学习本篇内容前,必须对虚拟机有深入的理解,特别是字节码指令部分。 1 Java内存模型背景 计算机为了弥补处理器与内存的访存速度差异,引入高速缓存,构成存储器层次结构(详情参考3、计算机系统漫游 。 带来 阅读全文
摘要:
特别说明: 本章内容基于HotSpot虚拟机: 编译器指HotSpot内置的即时编译器 虚拟机指HotSpot 机器码:能够被被当前机器直接执行的代码,机器属于某个平台:SPARC、x86-AMD64、ARMv8-AArch64 1 广义理解:解释执行与编译执行 阅读原文2天,我仍然没理解 什么是解 阅读全文
摘要:
1 编译器分类 Java的编译过程:将源代码转化成机器可执行的二进制代码。实际上,编译过程,是分阶段进行的,由此产生了不同的编译器。 编译器分类: | 类别 | 工作内容 | 代表 | | | | | | 前端编译器 | 把源代码转变成字节码 | JDK的Javac、Eclipse编译器(ECJ) 阅读全文
摘要:
1 解释执行与编译执行 解释执行:通过解释器执行 编译执行:通过即时编译器产生本地代码(机器码)执行 虚拟机的执行引擎支持以上两种方式 java语言的编译及执行过程: C语言的编译过程: 2 基于栈/寄存器的指令集 基于栈的指令集架构:指令不带参数,使用操作数栈中的数据作为指令的运算输入,指令的运算 阅读全文
摘要:
1 动态/静态类型语言比较 | | 对比1 | 对比2 | 对比3 |举例 | | | | | | | | 动态 | 运行时进行类型检查 | 在运行期确定类型,灵活 | 变量无类型而变量值才有类型 |Groovy、JavaScript、Lua、PHP、Python| | 静态 | 编译时检查 | 编 阅读全文
摘要:
特别备注: 本章节内容我认为比较难理解,对于【编译、运行阶段方法选择分析】这部分内容还不是很理解,需要多次去理解消化todo 1 关于方法调用 javac编译后Class文件存储方法的符号引用,而不是直接引用(方法在实际运行时内存地址) 该特性给Java带来了更强大的动态扩展能力 方法调用阶段的任务 阅读全文
摘要:
1 初谈执行引擎 一、关于Java虚拟机和计算机系统层面的物理机 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力 物理机的执行引擎是直接建立在处理器、缓存、指令集(例如x86-64)和操作系统面上 虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引 阅读全文
摘要:
1 关于类加载器 类加载器泛指一段代码 该代码实现的功能:通过一个类的全名来获取描述该类的二进制字节流 虚拟机角度,类加载器有两种:一种是启动类加载器(Bootstrap ClassLoader),由C++语言实现,属于虚拟机一部分;另外一种加载器是由Java实现,独立存在于虚拟机外部,并且全都继承 阅读全文
摘要:
1 概述 ArrayList的元素:有序、可重复、允许null ArrayList没有实现同步(synchronized),因此线程不安全的。(vector线程安全) ArrayList底层数据结构为数组,容量(capacity):表示底层数组长度。容量不足则触发扩容,创建一个更长的数组,并将元素迁 阅读全文
摘要:
本章学些目标: jvm如何加载字节码文件? 字节码文件的内容如何被jvm读取? 特别备注: 以下内容中的【类】:包含java类和java接口 1 类的生命周期 一、生命周期定义: 类被加载到虚拟机内存,到释放出内存的过程 二、生命周期的七个阶段: 将加载、验证、准备、解析、初始化这五个阶段所执行的具 阅读全文