JVM中负责类加载的子系统具体是如何运作的?

2026-06-11 01:483阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计688个文字,预计阅读时间需要3分钟。

JVM中负责类加载的子系统具体是如何运作的?

类的生命周期概述:

1.加载:将.class文件加载到JVM中,通过文件的全限定名读取字节码流到内存。

2.验证:确保加载的字节码文件符合Java虚拟机的规范。

- 验证:检查字节码文件的正确性。 - 准备:为类的静态变量分配内存,并设置默认初始值。

3.解析:将符号引用转换为直接引用。

4.初始化:为类的静态变量赋值,执行静态代码块。

类的生命周期   1.加载将.class二进制字节流流从磁盘读到内存中(通过文件的全限定名读取)2.连接2.1验证:验证字节码文件的正确性2.2准备:给类的静态变量分配内存,并赋予

类的生命周期

 

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再次加载。

 

本文共计688个文字,预计阅读时间需要3分钟。

JVM中负责类加载的子系统具体是如何运作的?

类的生命周期概述:

1.加载:将.class文件加载到JVM中,通过文件的全限定名读取字节码流到内存。

2.验证:确保加载的字节码文件符合Java虚拟机的规范。

- 验证:检查字节码文件的正确性。 - 准备:为类的静态变量分配内存,并设置默认初始值。

3.解析:将符号引用转换为直接引用。

4.初始化:为类的静态变量赋值,执行静态代码块。

类的生命周期   1.加载将.class二进制字节流流从磁盘读到内存中(通过文件的全限定名读取)2.连接2.1验证:验证字节码文件的正确性2.2准备:给类的静态变量分配内存,并赋予

类的生命周期

 

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再次加载。