《深入理解 Java 虚拟机》 第二版
本系列文章主要对书中重点内容进行总结,因此删除了示例,一些说明,提取了结论。如果没看过书,建议先看书,本系列文章适合用于查漏补缺复习用。
乐之终曲
技术很多,路还很长
展开
-
《深入理解 Java 虚拟机》 第二版导读
《深入理解 Java 虚拟机》 第二版导读虚拟机内存管理机制垃圾收集器与内存分配策略虚拟机执行子系统高效并发虚拟机内存管理机制深入理解 Java 虚拟机:Java 虚拟机内存组成概况重点部分,虚拟机的内存组成,面试可能问到的问题深入理解 Java 虚拟机:对象的创建过程重点部分,对象创建时是如何分配内存的(指针碰撞、空闲列表),面试可能问到的问题深入理解 Java 虚拟机:对象在内存中的结构与对象的访问重点部分,对象的组成结构,与对象的访问方式,无需死记硬背,大致理解即可,面试可能问到的问题原创 2020-07-09 12:14:27 · 500 阅读 · 0 评论 -
深入理解 Java 虚拟机:Java 虚拟机内存组成概况
与我一起学 JVM:Java 虚拟机内存组成前言前言原创 2020-03-19 15:04:43 · 704 阅读 · 1 评论 -
深入理解 Java 虚拟机:对象的创建过程
JVM 知识点整理:对象的创建过程类加载分配内存分配方式一:指针碰撞分配方式二:空闲列表如何选择?线程安全问题类加载虚拟机遇到一条 new 指令时,首先检查,指令的参数是否能在常量池种定位到一个类的符号引用,并且检查这个符号引用的类是否已经被加载、解析、初始化过,如果没有那必须执行相应的类加载过程。比如:String str = null;这就意味着类已经被加载,创建对象时这步类加载就不要...原创 2020-03-31 17:52:17 · 859 阅读 · 2 评论 -
深入理解 Java 虚拟机:对象在内存中的结构与对象的访问
深入理解 Java 虚拟机:对象在内存中的结构是什么样的?对象的组成对象头标记字段(Mark Word)类型指针(Klass Pointer)实例数据对齐填充对象的组成对象在内存中存储的布局,可以分为三块区域:对象头(head)实例数据(Instance Data)对齐填充(Padding)PS:1 字节 = 8 bit对象头对象头主要由两部分组成:标记字段,类型指针标记字段(Mark Word)用于存储运行时数据: 哈希码(HashCode),GC 分代年龄,锁状态标志,线程持有原创 2020-05-18 10:00:54 · 445 阅读 · 0 评论 -
深入理解 Java 虚拟机:GC垃圾收集器及相关算法
JVM 知识点整理:GC垃圾收集器判断哪些对象需要回收引用计数器算法可达性分析算法判断哪些对象需要回收Java 堆里存放着几乎所有的对象实例,因此在回收前需要判断哪些对象是 “存活” 的,这些对象不需要回收,只回收已经 “死去” 的对象(即不可能再被任何途径使用的对象)。引用计数器算法算法原理:给对象添加一个引用计数器,每当有一个地方引用它时,计算器 +1;当引用失效时,计数器 -1;任...原创 2020-03-27 13:57:44 · 2203 阅读 · 3 评论 -
深入理解 Java 虚拟机:JVM 中的 GC 垃圾收集器总结
深入理解 Java 虚拟机:JDK 中的那些垃圾收集器前言垃圾收集器Serial 收集器前言垃圾收集器是对应垃圾收集算法的具体实现,并且不同的垃圾收集器对应不同应用场景,会有不同的组合。因此并不存在完美的垃圾收集器,需要通过了解垃圾收集器的特性与组合,才能在调优时选择最适合的收集器。垃圾收集器Serial 收集器...原创 2020-06-09 15:52:38 · 587 阅读 · 0 评论 -
深入理解 Java 虚拟机:类的加载过程
深入理解 Java 虚拟机:类的加载过程类的生命周期加载验证文件格式验证元数据验证字节码验证符号引用验证准备解析初始化总结类的生命周期类从被加载到虚拟机内存中,到卸载出内存为止,整个生命周期包含:加载、验证、准备、解析、初始化、使用、卸载。其中 类的加载过程 包含:加载、验证、准备、解析、初始化验证、准备、解析 统称为 连接加载类加载的三步骤:通过一个类的 全限定名 获取定义此类的 二进制字节流将字节流所代表的 静态存储结构 转化为 方法区的运行时数据(永久代的常量池)在内存中生成一个代原创 2020-06-11 16:12:19 · 533 阅读 · 0 评论 -
深入理解 Java 虚拟机:双亲委派模型
深入理解 Java 虚拟机:双亲委派模型类加载器种类启动类加载器(Bootstrap ClassLoader)扩展类加载器(Extension ClassLoader)应用程序类加载器(Application ClassLoader)用户自定义类加载器(Customized Class Loader)双亲委派模型什么是双亲委派模型双亲委派模型工作原理双亲委派模型源码类加载器种类启动类加载器(Bootstrap ClassLoader)使用 C++ 实现,是虚拟机的一部分。所有其他的类加载器,都是 Ja原创 2020-06-17 14:02:45 · 781 阅读 · 0 评论 -
深入理解 Java 虚拟机:Java 内存模型与线程
深入理解 Java 虚拟机:Java 内存模型与线程什么是内存模型?什么是高速缓存?缓存一致性Java 内存模型主内存工作内存内存间的交互操作volatile 关键字对所有线程可见性禁止指令重排序Java 内存模型的特征原子性可见性有序性synchronized 缺点先行发生原则“天然的” 先行发生关系什么是内存模型?内存模型: 可以理解为,在特定的操作协议下,对特点的内存或高速缓存进行读写访问的过程的抽象。什么是高速缓存?在运算时,将需要使用到的数据从内存复制到缓存(Cache)中,以此让计算能更原创 2020-07-03 17:32:41 · 1372 阅读 · 0 评论 -
深入理解 Java 虚拟机:线程安全与锁优化
深入理解 Java 虚拟机:线程安全与锁优化什么是线程安全Java 语言中的线程安全不可变绝对线程安全相对线程安全线程兼容线程对立线程安全的实现方法互斥同步synchronized 关键字ReentrantLock 重入锁非阻塞同步无同步方案可重入代码线程本地存储锁优化自旋锁与自适应自旋什么是线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。原创 2020-07-09 11:36:07 · 939 阅读 · 0 评论