Java中的类加载与类卸载方式

 更新时间:2023年12月27日 16:13:39   作者:m0_38063172  
这篇文章主要介绍了Java中的类加载与类卸载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java中的类加载与类卸载

类加载

Java中的代码都写在类里面,源代码(.java文件)经过编译后会变成字节码(.class文件),当Java应用程序运行时,JVM会加载要用到的类。

负责类加载的是java.lang.ClassLoader的对象,ClassLoader的对象会根据类的binary name(不知道怎么翻译,二进制名?)来读取类的字节码,然后把这些字节码加载到JVM的方法区里,同时会在heap里面创建一个Class对象,这个Class对象是类的元数据和它的对象通信的接口。

类在heap中的Class对象和加载它的ClassLoader对象之间有强引用。

类卸载

不像类加载,Java中没有提供显式进行类卸载的API,但是如果加载类的ClassLoader对象被垃圾回收器回收的话,这个类就会被卸载。

所以我们可以自己实现ClassLoader,自己加载类,然后对ClassLoader对象的引用赋值为null,等ClassLoader对象剩下的引用数量为0时会被回收,这样就达到卸载类的目的了。

什么是类加载?什么时候卸载?

1.先看一下类的生命周期

加载 – 连接 – 初始化 – 使用 – 卸载

2.加载

类加载,指的是将类的.class文件中的二进制数据读入到内存中,把它放进运行时数据区的方法区内(Perm区)。

然后在堆区创建一个java.lang.Class对象,封装这个类在自身的方法区内的数据结构。

类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区(Perm区)内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。

注意,这是仍旧没有生成针对该类的对象。后续对类的实例化,会使用堆内存中的Class对象生成具体的实例对象。

3.卸载

如果有下面的情况,类就会被卸载:

1、该类所有的实例都已经被回收,也就是java堆中不存在该类的任何实例。

2、加载该类的ClassLoader已经被回收。

3、该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法。

如果以上三个条件全部满足,jvm就会在方法区垃圾回收的时候对类进行卸载,类的卸载过程其实就是在方法区中清空类信息,java类的整个生命周期就结束了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • redis中存储list<map>,list<entity>的处理

    redis中存储list<map>,list<entity>的处理

    本文主要介绍了redis中存储list<map>,list<entity>的处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Spring Boot加载配置文件的完整步骤

    Spring Boot加载配置文件的完整步骤

    这篇文章主要给大家介绍了关于Spring Boot加载配置文件的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • Java实现删除PDF中指定页面

    Java实现删除PDF中指定页面

    这篇文章主要为大家详细介绍了如何使用一个免费的国产Java库来删除PDF中的指定页面或者删除PDF中的空白页,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • Java内存模型详解

    Java内存模型详解

    JMM全称Java Memory Model, 中文翻译Java内存模型,一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,本详细介绍了Java内存模型,感兴趣的同学可以参考一下
    2023-04-04
  • mybatis plus中如何编写sql语句

    mybatis plus中如何编写sql语句

    这篇文章主要介绍了mybatis plus中如何编写sql语句,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java利用布隆过滤器实现快速检查元素是否存在

    Java利用布隆过滤器实现快速检查元素是否存在

    布隆过滤器是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。本文就来详细说说实现的方法,需要的可以参考一下
    2022-10-10
  • Java递归实现斐波那契数列

    Java递归实现斐波那契数列

    这篇文章主要为大家详细介绍了Java递归实现斐波那契数列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • SpringBoot如何配置Controller实现Web请求处理

    SpringBoot如何配置Controller实现Web请求处理

    这篇文章主要介绍了SpringBoot如何配置Controller实现Web请求处理,文中通过图解示例介绍的很详细,具有有一定的参考价值,需要的小伙伴可以参考一下
    2023-05-05
  • Java如何在PPT中绘制图形

    Java如何在PPT中绘制图形

    这篇文章主要介绍了Java如何在PPT中绘制图形,Microsoft PowerPoint可支持在幻灯片中插入各种类型的图形并且可设置图形填充、线条颜色、图形大小、位置等。下面将通过Java编程来演示在PPT中绘制图形的方法,需要的朋友可以参考下
    2019-07-07
  • Thymeleaf渲染网页时中文乱码的问题及解决

    Thymeleaf渲染网页时中文乱码的问题及解决

    这篇文章主要介绍了Thymeleaf渲染网页时中文乱码的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论