Java Virtual Machine 05 - Reading Note


第二章 结结构

  • 常量池是在方法区中用来放基本类型常量的(public static final)JDK 7以下也放字符串,JDK 7以上字符串放到了堆中
  • JDK 8 之后方法区被放在本地的元空间取代

对象结构

  • 在给新对象分配内存时,堆内内存由使用的GC收集器来决定使用指针碰撞还是空闲列表来分配内存
  • HotSpot中,对象在堆中由三个部分组成:对象头,实例数据,对齐填充
  • 对象头分为:Mark Word(包括哈 希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等)和 类型指针(即对象指向它的类型元数据的指针)

对象引用

  • 句柄访问指针访问 两种引用对象的方法

  • 句柄访问: 优点:使用句柄来访问的最大好处就是reference中存储的是稳定句柄地 址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而 reference本身不需要被修改。

    ​ 缺点:比较慢

    指针访问: 优点:比较快

    ​ 缺点: 要修改本身reference

第三章 GC

  • 任何一个对象的finalize方法只会被调用一次

判断对象是否存活

  • 引用计数法:方便但是无法解决互相引用问题

  • 可达分析算法

    固定可作为GC Roots的对象

方法区GC

  • 方法区GC收集废弃的常量和不再使用的类型信息

    收集废弃常量: 一个字符串”java”进入过常量池但是没有任何对象引用这个值,则判断为废弃

    收集废弃类型: 需要该类型满足三个条件:1. 所有实例都已经被回收 2. 对应的类加载器已被回收 3. 对应的java.lang.class对象没有在任何地方被使用,无法通过反射访问该类的方法

GC方法


A u t h o r: Joe
P o l i c y: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Joe !
Leave Your Comment Here
  TOC