加载:将class文件加载到内存中。
连接:分为验证、准备、解析。
验证:文件格式、数据、字节码等验证
准备:正式为类中变量分配内存并赋初始值
解析:将间接引用变成直接引用 如String s = "xx" + "ss"; 解析成 String s = "xxss"
初始化:初始化变量、静态代码块等。
创建对象内存分配策略
Java中的内存分配策略主要有两种,分别是指针碰撞和空闲列表。
指针碰撞:java堆空间内存是规整的,所有使用的空间在一边,未使用的空间在一边,中间会有一个指针作为分界线,分配内存时仅仅将指针向未使用的空间移动一段即可。
空闲列表:java堆空间内存不是规整的,虚拟机会记录一个空闲列表,分配内存时找到足够大的一块内存进行分配。
Java类加载器
1、启动类加载器
2、拓展类加载器
3、应用程序类加载器
4、自定义加载器
双亲委派机制