Java类加载机制

类加载包括这七个过程。

加载Loading

有两种时机会触发类加载:1、预加载.2、运行时加载

验证

连接阶段的第一步,这一阶段的目的是为了确保.class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全

准备

准备阶段是正式为类变量分配内存并设置其初始值的阶段,这些变量所使用的内存都将在方法区中分配

解析

解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程

初始化

初始化阶段是类加载过程的最后一步,初始化阶段是真正执行类中定义的Java程序代码(或者说是字节码)的过程。初始化过程是一个执行类构造器<clinit>()方法的过程,根据程序员通过程序制定的主观计划去初始化类变量和其它资源。把这句话说白一点,其实初始化阶段做的事就是给static变量赋予用户指定的值以及执行静态代码块

虚拟机会保证类的初始化在多线程环境中被正确地加锁、同步,即如果多个线程同时去初始化一个类,那么只会有一个类去执行这个类的<clinit>()方法,其他线程都要阻塞等待,直至活动线程执行<clinit>()方法完毕

Java虚拟机规范严格规定了有且只有5种场景必须立即对类进行初始化:

1.使用new关键字,调用静态方法或者静态变量。

2.虚拟机启动的时候会初始化main方法的那个类。

3.反射

4.子类的父类没有加载。

5.

posted @ 2017-07-19 14:27  2015,加油!  阅读(90)  评论(0编辑  收藏  举报