![](https://img-blog.csdnimg.cn/20201011163145591.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入理解java虚拟机
文章平均质量分 81
《深入理解java虚拟机》周志明著 第二版 读书笔记
维护世界和平有我
这个作者很懒,什么都没留下…
展开
-
线程上下文类加载器(Thread Context ClassLoader)
文章目录线程上下文类加载器(Thread Context ClassLoader)线程上下文类加载器如何破坏双亲委派模型sun.misc.Launcher线程上下文类加载器(Thread Context ClassLoader)线程上下文件类加载器(Thread Context ClassLoader)//设置线程上下文类加载器 通过java.lang.Thread类的setContextClassLoader(ClassLoader cl)方法来设置;如果创建线程时还未设置上下文类加载器原创 2021-05-19 22:26:20 · 2817 阅读 · 0 评论 -
逃逸分析、栈上分配、标量替换、同步消除、锁消除
文章目录逃逸分析的作用栈上分配同步消除(==锁消除==)标量替换其它知识点https://docs.oracle.com/javase/8/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysishttps://blog.51cto.com/14510351/2441245https://segmentfault.com/a/1190000038262877#https://www.cnblogs.com/zhux原创 2021-05-16 00:44:06 · 724 阅读 · 0 评论 -
java内存分配与回收策略、动态对象年龄判断、空间分配担保
文章目录3.6.1 对象优先在Eden分配3.6.2 大对象直接进入老年代3.6.3 长期存活的对象分配到老年代3.6.4 动态对象年龄判断3.6.5 空间分配担保3.6.1 对象优先在Eden分配对象优先在Eden分配,当Eden没有足够空间进行分配时,虚拟机发起一次Minor GC;Minor GC发生在新生代GC;Major GC/full Gc发生在老年代的GC; 出现了Major GC,则至少伴随一次的Minor GC,除了Parallel Scavenge收集器(直接Ma原创 2020-10-11 18:56:36 · 978 阅读 · 0 评论 -
java垃圾收集算法、标记-清除算法、复制算法、标记-整理清除、分代收集算法
文章目录3.3.1 标记-清除算法3.3.2 复制算法(重点)3.3.3 标记-整理清除(重点)3.3.4 分代收集算法(重点)3.3.1 标记-清除算法分为“标记”和“清除”2个阶段,先标记所有需要回收的对象,在标记完成后统一回收所有被标记的对象;缺点:效率,标记和清除这两个过程的效率都不高;空间,标记和清除之后会产生大量不连续的内存碎片; 空间碎片太多可能会导致以后再程序运行过程中需要分配较大的对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。3.3.2原创 2020-10-11 16:36:47 · 710 阅读 · 0 评论 -
java垃圾收集器、Serial收集器、ParNew收集器、Parallel Scavenge收集器、Serial Old 收集器、CMS收集器、G1收集器、如何查看GC日志
文章目录3.5.1 Serial收集器3.5.2 ParNew收集器3.5.3 Parallel Scavenge收集器3.5.4 Serial Old 收集器3.5.5 Parallel Old收集器3.5.6 CMS收集器(重要)3.5.7 G1收集器(非常重要)3.5.8 理解GC日志HotSpot虚拟机的垃圾收集器 ,如果两个收集器之间存在连线,就说明它们可以搭配使用;注意:新生代的垃圾回收器 都是复制算法,老年代都是“标记-清理”或者“标记-整理”算法。新生代的垃圾回收器 都是复制算法新原创 2020-10-11 16:29:03 · 638 阅读 · 0 评论 -
枚举根节点、安全点、安全区域、OopMap
文章目录3.4.1 枚举根节点3.4.2 安全点3.4.3 安全区域对象存活判定算法和垃圾收集算法3.4.1 枚举根节点使用一组称为OopMap的数据解构来完成枚举根节点;枚举根节点即为GC Roots的一个枚举;GC Roots中节点++一般++为全局性引用(常量、类静态属性) 和 栈帧中的本地变量表。具体的GC Roots(了解)虚拟机栈(栈桢中的 局部变量表中的 本地变量表)中的引用的对象方法区中的 类的静态属性 引用的对象方法区中的常量引用的对象本地方法栈中JNI(Nat原创 2020-10-11 10:54:38 · 847 阅读 · 1 评论 -
java引用计数法、可达性分析法、强软虚弱、强引用、软引用、弱引用、虚引用、回收方法区、finalize()方法
文章目录3.2.1 引用计数算法3.2.2 可达性分析算法(重点)3.2.3 再谈引用强引用软引用弱引用虚引用3.2.4 生存还是死亡3.2.5 回收方法区判断对象是否为垃圾(是否存活)的算法1.引用计数算法 (基本上废掉了)2.可达性分析算法3.2.1 引用计数算法https://blog.csdn.net/linsongbin1/article/details/51448714在对象中添加一个引用计数器,当有引用指向这个对象时,引用计数器+1,当指向该对象的引用失效时,引用计数器-原创 2020-10-10 19:44:32 · 971 阅读 · 0 评论 -
java对象创建、对象内存布局、对象的访问定位、句柄池、直接指针
2.3 HotSpot虚拟机对象2.3.1 对象的创建1 类加载检查2 为新生对象分配内存分配方式3 分配内存的并发问题4 初始化5 对象头设置6 执行init方法2.3.2 对象的内存布局1对象头2 实例数据2 对齐填充2.3.3 对象的访问定位1 使用句柄2 直接指针2.3.1 对象的创建https://www.cnblogs.com/frankcui/p/10969248.html#_label0https://www.cnblogs.com/prayers/p/5515245.html1原创 2020-10-10 16:40:08 · 915 阅读 · 0 评论 -
java运行时数据区(pc寄存器、虚拟机栈(栈帧)、本地方法栈、java堆、方法区、运行时常量池、直接内存)
java运行时数据区2.1 概述2.2.1 pc寄存器(程序计数器)2.2.2 Java虚拟机栈栈帧1 局部变量表Solt2 操作数栈3 动态链接2.2.3 本地方法栈2.2.4 Java堆2.2.5 方法区2.2.6 运行时常量池2.2.7 直接内存2.2.7 直接内存2.1 概述2.2.1 pc寄存器(程序计数器)程序计数器是一块较小的内存空间,线程私有。它可以看作是当前线程所执行的字节码的行号指示器字节码指令集,由操作码和操作数组成,.java文件编译后的.class就是操作数和操作码原创 2020-10-10 14:51:08 · 794 阅读 · 0 评论 -
java对象的创建、java分配内存的方式、指针碰撞、空闲列表
深入理解JVM虚拟机 第二章 java内存区域与内存溢出异常 2.3 HotSpot虚拟机对象2.3.1 对象的创建分配内存的方式1 指针碰撞2 空闲列表3 分配内存的并发问题创建对象2.3.1 对象的创建分配内存的方式1 指针碰撞 假设Java堆中内存是绝对规整的,所有用过的内存放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针指向空闲空间那边挪动一段与对象大小相等的距离,这个分配方式叫做“指针碰撞”原创 2020-10-07 12:18:05 · 1426 阅读 · 0 评论 -
java运行时数据区、程序计数器(pc寄存器)、Java虚拟机栈、栈帧、局部变量表、操作数栈
深入理解JVM虚拟机 第二章 java内存区域与内存溢出异常 2.2 运行时数据区2.2 运行时数据区1 概述2.2.1 程序计数器2.2.2 Java虚拟机栈栈帧1 局部变量表Solt2 操作数栈3 动态链接2.2 运行时数据区1 概述运行时数据区2.2.1 程序计数器1.pc寄存器(程序计数器) 可以看做(当前线程的)字节码的行号指示器(.class文件的行号,记住指令运行到哪了) 每一个java线程都有自己的pc寄存器。 如果该方法是nativa,那么pc寄存器得值原创 2020-10-07 12:09:16 · 797 阅读 · 0 评论