Java 类加载器详解

开始介绍类加载器和双亲委派模型之前,简单回顾一下类加载过程。

  • 类加载过程:加载->连接->初始化
  • 连接过程又可分为三步:验证->准备->解析

类加载过程

加载是类加载过程的第一步,主要完成下面 3 件事情:

  1. 通过全类名获取定义此类的二进制字节流
  2. 将字节流所代表的静态存储结构转换为方法区的运行时数据结构
阅读更多

垃圾收集器与内存分配

一.判断对象是否存活的算法:

  1. 引用计数法:

    给对象添加一个引用计数器,每一个地方引用它时计数器加1;引用失效时计数器减1.为值为0的对象不可能再被使用.

    缺点:

    难以解决对象之间循环引用的问题(对象A引用对象B,对象B引用对象A,两个对象无实际意义)

  2. 可达性分析算法:

    通过一些称为”GC_ROOTS”的对象作为起点,开始向下搜索引用它的对象,这个过程走过的路径即”引用链”.当一个对象到”GC_ROOTS”没有任何引用链相连,证明此对象不存活.

阅读更多

虚拟机类加载机制

一.类加载时机:

  1. 类从加载到虚拟机内存~卸载出内存的生命周期(这些阶段通常是交叉混合进行的):

    加载 –> 验证 –> 准备 –> 解析 –> 初始化 –> 使用 –> 卸载

  2. 主动引用五种必须立即对类进行初始化的情况:

阅读更多