读书笔记加自我总结-----------------------------------------------
《疯狂JAVAj讲义》
《深入理解JAVA虚拟机》第七章虚拟机加载机制
《传智播客Java底层公开课视频》教学视频
参考:
一、虚拟机的类加载机制
加载 连接 初始化 ------------> 程序运行期完成
坏处: 好处:
性能开销 灵活性大大增强
二、虚拟机加载的过程如下
三、加载之后在内存中的样子
假设现在有这样一个类
public class Demo {
public static void main(String[] args) {
new Person();
}
}
class Person{
private int age;
public Person()
{
System.out.println("this is Person Construct Method");
}
}
class Animal{
public static String name;
}
它在经过加载之后大致在内存中就如下:(非官方图,个人意淫)
至于new一个类之后在堆中内存怎么存放,咱们下节再细说
四、过程5初始化
自动收集1.类变量赋值,2静态语句块 形成<clinit>方法,各语句的顺序按照在类文件中出现的顺序
虚拟机会保证一个类的<clinit>()方法在多线程环境被正确的加锁、同步。
如果多线程同时初始化一个类,只会一个线程执行<clinit>()方法,其他线程阻塞等待。执行的线程执行结束后,其它线程唤醒之后不会再进入<clinit>()。同一个类加载器下,一个类只会初始化一次。
五、过程1加载:加载器
过程1由一个特定的组件进行完成:类加载器
除了加载阶段(图1的阶段1)用户应用程序可以通过自定义加载器参与,剩下的动作完全由虚拟机主导控制<