JVM-类加载子系统

类的生命周期

 

 

 1.加载

将.class二进制字节流流从磁盘读到内存中(通过文件的全限定名读取)

2.连接

  2.1验证:验证字节码文件的正确性

  2.2准备:给类的静态变量分配内存,并赋予默认值(比如 int i = 0)

  2.3解析:类装载器装入类所引用的其它类

3.初始化

为静态变量赋予正确的初始值,此阶段才是程序员编写的程序变量赋予真正的初始值,执行静态代码块

4.使用

通过执行引擎执行相应类的方法

5.卸载

生命周期结束有以下几种情况:1、程序正常执行结束   2、执行中出现异常  3、操作系统出现异常  4、通过执行 system.exit()

 

类加载器的种类(主要)

启动类加载器(Bootstrap ClassLoader):负责加载JRE核心类库,像JRE中的rt.jar等(C/C++);

扩展类加载器(Extension ClassLoader):负责加载JRE扩展目录ext中的jar包;

系统类加载器(Application ClassLoader):负责加载ClassPath路径下的类包;

类加载机制

1.全盘负责委托机制(比较古老)

当一个ClassLoader加载一个类时,需要按需加载其它类的时候,那该类也由这个ClassLoader载入,比如一个A类加载是由Application ClassLoader载入,这个A类引用了B类,这时B类也将由Application ClassLoader载入。

2.双亲委派机制(parent译义为双亲)

 

 总结:

1.安全机制:防止用户自定义类篡改核心类库,比如自定义String.class类不会被加载,如果这个String类被加载了那相当于Java的String类被替代了。这是不允许的。

2.避免类的重复加载:当父类ClassLoader加载了一个类的时候,这个类不需要被其它ClassLoader再次加载。

 

posted @ 2019-11-29 15:50  大大大圣  阅读(725)  评论(0编辑  收藏  举报