java的类加载后什么时候会被释放?

发布网友 发布时间:2022-04-23 15:29

我来回答

4个回答

热心网友 时间:2022-04-19 02:00

java的类加载后且当使用阶段完成之后,java类就进入了卸载阶段,也就是所谓的释放。

使用阶段包括主动引用和被动引用,主动饮用会引起类的初始化,而被动引用不会引起类的初始化。

一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直接被使用的情况,如图所示:

PS:关于类的卸载,在类使用完之后,如果满足下面的情况,类就会被卸载:

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

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

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

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

热心网友 时间:2022-04-19 03:18

首先,"java的类在第一次需要创建类的实例(对象)时被加载"这个说的不对

java中类被使用就就会时就会被加载到内存(比如反射等)
然后回答你的问题。

首先要介绍下相关知识(基础知识纯属拷贝):

首先来了解一下jvm(java虚拟机)中的几个比较重要的内存区域

方法区:在java的虚拟机中有一块专门用来存放已经加载的类信息、常量、静态变量以及方法代码的内存区域,叫做方法区。
常量池:常量池是方法区的一部分,主要用来存放常量和类中的符号引用等信息。
堆区:用于存放类的对象实例。
栈区:也叫java虚拟机栈,是由一个一个的栈帧组成的后进先出的栈式结构,栈桢中存放方法运行时产生的局部变量、方法出口等信息。当调用一个方法时,虚拟机栈中就会创建一个栈帧存放这些数据,当方法调用完成时,栈帧消失,如果方法中调用了其他方法,则继续在栈顶创建新的栈桢。
除了以上四个内存区域之外,jvm中的运行时内存区域还包括本地方法栈和程序计数器,这两个区域与java类的生命周期关系不是很大,在这里就不说了,感兴趣可以自己百度一下。

其实类在JVM里面有以下几个阶段:

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

主要给你说明卸载:
在类使用完之后可能会被卸载,可能性如下:
如果有下面的情况,类就会被卸载:
该类所有的实例都已经被回收,也就是java堆中不存在该类的任何实例。
加载该类的ClassLoader已经被回收。
该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法。
如果以上三个条件全部满足,jvm就会在方法区垃圾回收的时候对类进行卸载,类的卸载过程其实就是在方法区中清空类信息,java类的整个生命周期就结束了。

热心网友 时间:2022-04-19 04:53

从网络取到.class,然后保存在本地的临时目录,就好了。

这个什么时候从内存清除,是由jre决定,是会在系统资源紧张时处理的追问非常感谢谢您的帮助!

热心网友 时间:2022-04-19 06:44

程序结束后吧,,不然都在方法区放着的

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com