Skip to content

对类加载过程的补充 #662

Closed
Closed
@guang19

Description

@guang19

image

类的生命周期:
加载 -->连接-->初始化-->使用-->卸载

其中连接又可细分为: 验证,准备,解析三个阶段。

加载,连接,初始化老哥都已经写了。我想补充下卸载阶段:

卸载类

卸载类即该类的Class对象被GC。

卸载类需要满足3个要求:

  1. 该类的所有的实例对象都已被GC,也就是说堆不存在该类的实例对象。
  2. 该类没有在其他任何地方被引用
  3. 该类的类加载器的实例已被GC

所以,在JVM生命周期类,由jvm自带的类加载器加载的类是不会被卸载的。但是由我们自定义的类加载器加载的类是可能被卸载的。

只要想通一点就好了,jdk自带的BootstrapClassLoader,PlatformClassLoader,AppClassLoader负责加载jdk提供的类,所以它们(类加载器的实例)肯定不会被回收。而我们自定义的类加载器的实例是可以被回收的,所以使用我们自定义加载器加载的类是可以被卸载掉的。

Metadata

Metadata

Assignees

No one assigned

    Labels

    awesomeenhancementNew feature or request or suggestion

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions