JVM
文章平均质量分 78
HardCorePlayer
共勉
展开
-
深入理解Java虚拟机笔记(7)-------类加载器
类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性。即使这两个类来源于同一个Class文件,被同一个Java虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等文章目录启动类加载器(Bootstrap Class Loader)扩展类加载器(Extension Class Loader)应用程序类加载器/系统类加载器(Application Class Loader)双亲委派模型启动类加载器(Bootstrap Class Loader)这个类加载器负责加载存放在<JAV.原创 2020-07-24 21:10:38 · 86 阅读 · 0 评论 -
深入理解Java虚拟机笔记(6)-------类加载时机与类加载过程
类加载时机类从加载到卸载共有7个阶段,如下图加载、验证、准备、初始化和卸载这五个阶段的开始顺序是确定的,并不意味着完成的阶段也是这个顺序,因为某一个阶段可能会调用其他阶段。其中解析阶段有可能在初始化阶段之后执行。类加载阶段开始的时机会根据虚拟机而不同,但初始化阶段在在下面6中情况中必须立即开始:遇到new、getstatic、putstatic或invokestatic这四条字节码指令时:能够生成这4中指令的场景有:使用new关键字实例化对象;读取或者设置一个静态字段(被final修饰、已在编原创 2020-07-22 21:40:21 · 166 阅读 · 0 评论 -
深入理解Java虚拟机笔记(5)-------经典垃圾收集器
垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器CMS收集器G1收集器(Garbage First)1.Region2.TAMS指针3.原始快照(SATB)算法回收过程本文主要介绍CMS和G1首先看看HotSpot的各种垃圾收集器关系图图中互相连线的垃圾收集器之间可以组合使用,被JDK9断开连线的是在JDK9中废弃的组合。垃圾收集器所在那个区域代表这个垃圾收集器是作用于该分代的。老年代:CMS,Seria原创 2020-07-21 21:31:34 · 498 阅读 · 0 评论 -
深入理解Java虚拟机笔记(4)-------垃圾回收算法
分代收集理论的三条假说弱分代假说:绝大多数对象都是朝生夕灭的(大多数对象(大概98%)第一次垃圾回收时就被回收掉了)强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡(eg:经过几次垃圾回收都没有被回收的对象,下一次回收很可能也不会回收它)跨代引用假说:跨代引用相对于同代引用来说仅占极少数(跨代引用就是新生代和老年代的对象之间有引用关系,有这种跨代引用的对象很少)接下来主要说三种垃圾收集算法: 标记-清除算法,标记-复制算法,标记-整理算法。1. 标记-清除算法:该算法分为标记和清除两.原创 2020-07-20 21:27:33 · 101 阅读 · 0 评论 -
深入理解Java虚拟机笔记(3)-------垃圾回收判断方法
1. 引用计数器法这是一种简单高效的判断对象是否可用的算法,简单来说就是在对象中添加一个引用计数器,当有引用指向它的时候计数器就+1,当它的一个引用不在指向它的时候计数器就-1;当计数器为0时就说明这个对是不再可用的。虽然这个方法思想很简单,但是要考虑到很多特殊情况的时候就要做很多额外工作才能让这个方法正常工作。最常见的一个问题就是互相引用,而外界不再有引用指向对象的情况。所以Java没有使用这种方法。public static void testGC() {A objA = new A();//A和原创 2020-07-18 11:23:38 · 102 阅读 · 0 评论 -
深入理解Java虚拟机笔记(2)-------对象创建、内存布局、访问定位
对象的创建:JVM在创建对象时会先检查这个对象的类是否已经被加载、解析、初始化过,如果没有则会进行类的加载,通过类加载检查后正式进行对象创建。进行对象内存分配将分配到的内存空间初始化为零值(对象头除外)设置对象头信息,如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码(实际上对象的哈希码会延后到真正调用Object::hashCode()方法时才计算)、对象的GC分代年龄等信息。这些信息存放在对象的对象头(Object Header)之中。根据虚拟机当前运行状态的不同,如是否启用偏向原创 2020-07-18 09:26:42 · 92 阅读 · 0 评论 -
深入理解Java虚拟机笔记(1)-------JVM内存模型
运行时数据区程序计数器:如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)。此内存区域是唯一一个在《Java虚拟机规范》中没有规定任何OutOfMemoryError情况的区域。...原创 2020-07-15 22:09:18 · 99 阅读 · 0 评论