随笔分类 -  《深入理解Java虚拟机》读书笔记

关于《深入理解Java虚拟机》读书笔记
摘要:1 锁优化历史 synchronized 从 JDK1.0到JDK1.5 ,效率低 JDK1.5到JDK1.6,JVM团队对synchronized进行深度优化,加入了:适应性自旋、锁消除、锁膨胀、轻量级锁、偏向锁 等优化技术 JDK1.5 开始,加入java.util.concurrent,提供A 阅读全文
posted @ 2022-12-16 20:05 拿了桔子跑-范德依彪 阅读(112) 评论(0) 推荐(0) 编辑
摘要:1 线程安全定义 含糊的定义:如果一个对象可以安全地被多个线程同时使用,那它就是线程安全的 严谨的定义: 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对 阅读全文
posted @ 2022-12-16 15:10 拿了桔子跑-范德依彪 阅读(84) 评论(0) 推荐(0) 编辑
摘要:1 线程的实现 主流操作系统都提供线程的实现,在这基础上,上层应用可以构建自己的线程实现方式(Java、php、go的线程实现各不一样)。 三种线程实现方式:内核线程实现(1:1实现),用户线程实现(1:N实现), 用户线程加轻量级进程混合实现(N:M实现) 1.1 内核线程实现 内核线程:直接由操 阅读全文
posted @ 2022-12-15 20:25 拿了桔子跑-范德依彪 阅读(125) 评论(0) 推荐(0) 编辑
摘要:特别说明:本篇侧重理论,涉及的定义和结论,都是基于Java虚拟机规范定义或者由规范推导出来。因此学习本篇内容前,必须对虚拟机有深入的理解,特别是字节码指令部分。 1 Java内存模型背景 计算机为了弥补处理器与内存的访存速度差异,引入高速缓存,构成存储器层次结构(详情参考3、计算机系统漫游 。 带来 阅读全文
posted @ 2022-12-14 18:05 拿了桔子跑-范德依彪 阅读(29) 评论(0) 推荐(0) 编辑
摘要:特别说明: 本章内容基于HotSpot虚拟机: 编译器指HotSpot内置的即时编译器 虚拟机指HotSpot 机器码:能够被被当前机器直接执行的代码,机器属于某个平台:SPARC、x86-AMD64、ARMv8-AArch64 1 广义理解:解释执行与编译执行 阅读原文2天,我仍然没理解 什么是解 阅读全文
posted @ 2022-12-12 23:59 拿了桔子跑-范德依彪 阅读(276) 评论(0) 推荐(0) 编辑
摘要:1 编译器分类 Java的编译过程:将源代码转化成机器可执行的二进制代码。实际上,编译过程,是分阶段进行的,由此产生了不同的编译器。 编译器分类: | 类别 | 工作内容 | 代表 | | | | | | 前端编译器 | 把源代码转变成字节码 | JDK的Javac、Eclipse编译器(ECJ) 阅读全文
posted @ 2022-12-08 17:29 拿了桔子跑-范德依彪 阅读(635) 评论(0) 推荐(0) 编辑
摘要:1 解释执行与编译执行 解释执行:通过解释器执行 编译执行:通过即时编译器产生本地代码(机器码)执行 虚拟机的执行引擎支持以上两种方式 java语言的编译及执行过程: C语言的编译过程: 2 基于栈/寄存器的指令集 基于栈的指令集架构:指令不带参数,使用操作数栈中的数据作为指令的运算输入,指令的运算 阅读全文
posted @ 2022-12-07 17:57 拿了桔子跑-范德依彪 阅读(56) 评论(0) 推荐(0) 编辑
摘要:1 动态/静态类型语言比较 | | 对比1 | 对比2 | 对比3 |举例 | | | | | | | | 动态 | 运行时进行类型检查 | 在运行期确定类型,灵活 | 变量无类型而变量值才有类型 |Groovy、JavaScript、Lua、PHP、Python| | 静态 | 编译时检查 | 编 阅读全文
posted @ 2022-12-06 17:58 拿了桔子跑-范德依彪 阅读(31) 评论(0) 推荐(0) 编辑
摘要:特别备注: 本章节内容我认为比较难理解,对于【编译、运行阶段方法选择分析】这部分内容还不是很理解,需要多次去理解消化todo 1 关于方法调用 javac编译后Class文件存储方法的符号引用,而不是直接引用(方法在实际运行时内存地址) 该特性给Java带来了更强大的动态扩展能力 方法调用阶段的任务 阅读全文
posted @ 2022-12-04 20:28 拿了桔子跑-范德依彪 阅读(46) 评论(0) 推荐(0) 编辑
摘要:1 初谈执行引擎 一、关于Java虚拟机和计算机系统层面的物理机 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力 物理机的执行引擎是直接建立在处理器、缓存、指令集(例如x86-64)和操作系统面上 虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引 阅读全文
posted @ 2022-12-01 14:37 拿了桔子跑-范德依彪 阅读(43) 评论(0) 推荐(0) 编辑
摘要:1 关于类加载器 类加载器泛指一段代码 该代码实现的功能:通过一个类的全名来获取描述该类的二进制字节流 虚拟机角度,类加载器有两种:一种是启动类加载器(Bootstrap ClassLoader),由C++语言实现,属于虚拟机一部分;另外一种加载器是由Java实现,独立存在于虚拟机外部,并且全都继承 阅读全文
posted @ 2022-11-25 16:02 拿了桔子跑-范德依彪 阅读(94) 评论(0) 推荐(0) 编辑
摘要:本章学些目标: jvm如何加载字节码文件? 字节码文件的内容如何被jvm读取? 特别备注: 以下内容中的【类】:包含java类和java接口 1 类的生命周期 一、生命周期定义: 类被加载到虚拟机内存,到释放出内存的过程 二、生命周期的七个阶段: 将加载、验证、准备、解析、初始化这五个阶段所执行的具 阅读全文
posted @ 2022-11-13 20:52 拿了桔子跑-范德依彪 阅读(83) 评论(0) 推荐(0) 编辑
摘要:1 学习总结 2 关于字节码指令 本章内容不深入讲解指令的执行过程,只对指令列表的及其基本功能说明。 2.1 指令组成 字节码指令:指令编码+操作数组成。如下图所示: 指令编码用二进制数来表示,分配1字节大小。因此字节码指令最多有2^8,即256条。 操作数不使用对齐补零方式填充,因此如果超过1字节 阅读全文
posted @ 2022-11-10 23:55 拿了桔子跑-范德依彪 阅读(276) 评论(0) 推荐(0) 编辑
摘要:99 学习总结 字节码文件结构总结 学习收获 理解字节码文件内容的结构 学会利用工具初步分析、看懂字节码文件的内容 字节码文件对比java文件 它结构化为固定的内容格式 借用常量池,复用源文件的存在的重复关键词。 字节码文件包含了字节码指令,变成字节码的过程就是C语言:预处理-编译-的过程。 疑问和 阅读全文
posted @ 2022-10-25 20:35 拿了桔子跑-范德依彪 阅读(221) 评论(0) 推荐(0) 编辑
摘要:扩展:Gc日志分析工具 GC日志分析工具-GCEasy GC日志分析神器-GCEasy详解 1 自动内存管理 Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:分配与回收 自动给对象分配内存 自动回收分配给对象的内存 Java的对象内存分配的一般规则: 一般情况下,给对象分配堆内存 阅读全文
posted @ 2022-10-17 20:03 拿了桔子跑-范德依彪 阅读(167) 评论(0) 推荐(0) 编辑
摘要:1 垃圾收集三件事 哪些内存需要回收:死去的对象需要回收 什么时候回收 如何回收 按照jvm内存区域划分原则:程序计数器、虚拟机栈、本地方法栈3个区域的内存随线程创建而划分,因此线程结束时,内存也自动释放。 本章节分析的是Java堆和方法区的内存管理策略 1、虚拟机栈、本地方法栈,栈中的栈帧随着方法 阅读全文
posted @ 2022-09-20 20:01 拿了桔子跑-范德依彪 阅读(150) 评论(0) 推荐(0) 编辑
摘要:说明:此分析基于HotSpot虚拟机 1 对象的创建 Java对象的创建方式有三种: 通过new创建 通过反序列化创建 通过复制创建 通过new方式的对象创建过程如下: 创建过程说明: 执行字节码遇到new指令时,首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用。 类的初始化过程在 阅读全文
posted @ 2022-09-19 16:51 拿了桔子跑-范德依彪 阅读(116) 评论(0) 推荐(0) 编辑
摘要:1 关于自动内存管理 Java是由jvm来管理内存,包括自动分配以及自动回收,因此它不容易出现内存泄漏和内存溢出问题。 C/C++,由程序员手动管理内存,手动完成:使用前申请内存,使用后释放内存。 2 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区 阅读全文
posted @ 2022-09-17 19:55 拿了桔子跑-范德依彪 阅读(98) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示