0%

jvm垃圾的回收作用范围

下面描述的收集器是基于 JDK1.7 Update 14 之后的 HotSpot 虚拟机,这个虚拟机包含的所有收集器如下图:如果两个收集器之间存在连线,就说明他们可以搭配使用。

1610272098369

阅读全文 »

垃圾分代收集

  • Full GC : 针对的是整个堆。包括:新生代、老年代、永久代。

  • 针对HotSpot VM 的实现,他里面的GC其实准确分类只有两大类:

    • 部分收集器(Partial GC):

      • 新生代收集器(Minor GC/ Yong GC):只对新生代进行垃圾收集
      • 老年代收集器(Major GC/Old GC):只对老年代进行垃圾收集。
      • 混合收集器(Mixed GC):对整个新生代和部分老年代进行垃圾收集。
    • 整堆收集(Full GC):收集整个Java堆和方法区。

堆的基本结构

阅读全文 »

垃圾收集算法

标记-清除算法

  • 该算法分为 “标记” 和 “清除” 阶段:首先标记出所有不需要回收的对象,在标记完成后统一回收掉所有没有被标记的对象。它是最基础的收集算法,后续的算法都是对其不足进行改进得到。这种垃圾收集算法会带来两个明显的问题:
    • 效率问题
    • 空间问题(标记清除后会产生大量不连续的碎片)
阅读全文 »

String类和常量池

  • 字面量会到 java 堆中的常量池去找
  • new 的方式会在堆中创建

1610271202594

阅读全文 »

类加载过程

  • 加载
  • 连接
    • 验证
    • 准备
    • 解析
  • 初始化

1610292210392

阅读全文 »

对象的访问定位

java 程序通过栈上的 reference 数据来操作堆上的具体对象

对象的访问方式2种:使用句柄,直接指针

阅读全文 »

对象的内存布局

对象的内存布局分为3块区域:对象头、实例数据对齐填充

对象头

阅读全文 »

Java创建对象的过程

类加载检查

  • 虚拟机遇到new指令时,首先去检查常量池中有没有这个类的符号应用,并且检查这个符号引用代表的类是否已被加载、验证、准备、解析、初始化过。如果没有,那么必须先执行相应的类的加载过程。
阅读全文 »

JVM体系结构

基本概念

​ JVM 是可运行 Java 代码的假想计算,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收、堆和一个存储方法域。 JVM 是运行在操作系统之上的,它与硬件没有直接的交互。

阅读全文 »

对象死亡判断

引用计数法

  • 给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效,计数器就减1;任何时候计数器为0的对象就是不可能再被使用的

    ​ 难以解决对象间的循环引用。除了对象 objA和objB相互引用这对方外,这两个对象之间再无任何引用。但是他们因为相互引用对方,导致他们的应用计数器都不为0,于是引用计数算法无法通知GC回收器回收他们。

阅读全文 »