Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类何时从堆内存卸载_Java - Fatal编程技术网

Java 类何时从堆内存卸载

Java 类何时从堆内存卸载,java,Java,可能重复: 类何时从内存中卸载 为了加载一个类,我们可以调用class.forName(“NameOfClass”)或创建类的对象时,将该类加载到内存中。简单地说: 当删除对类(及其实例)的所有引用并对使用的类加载器进行垃圾收集时,类将被卸载。Classes 类将由类加载器加载,并且当该类加载器被垃圾收集时(可能)将被卸载。在普通应用程序中,我们不关心类加载器:类永远不会被卸载 类/对象的实例 垃圾收集器检测到不再有对该实例/对象的引用时,将在堆上创建并删除对象 (简而言之,更好的细节:请参见

可能重复:

类何时从内存中卸载

为了加载一个类,我们可以调用
class.forName(“NameOfClass”)或创建类的对象时,将该类加载到内存中。

简单地说:


当删除对类(及其实例)的所有引用并对使用的类加载器进行垃圾收集时,类将被卸载。

Classes

类将由类加载器加载,并且当该类加载器被垃圾收集时(可能)将被卸载。在普通应用程序中,我们不关心类加载器:类永远不会被卸载

类/对象的实例

垃圾收集器检测到不再有对该实例/对象的引用时,将在堆上创建并删除对象


(简而言之,更好的细节:请参见问题)

没有定义类将被卸载的确切时间,就像没有定义对象可能被垃圾回收的确切时间一样。定义的是何时可以卸载:

当且仅当类或接口的定义类 垃圾收集器可以回收装载器


我正要回答,但谷歌上的第一个链接是这样一个问题:你为什么需要这个?顺便说一句,这取决于JVM,可能根本无法完成(请参阅臭名昭著的PermGen问题)。不,它可能可以省略垃圾收集,但在某些情况下,该类实际上可能永远不会被收集。不正确。一个类只有在其类加载器被垃圾回收时才会被卸载。您正在回答对象/实例。同意,应该删除对类和类加载器本身的引用。@CodeBuzz-没有对类的(Java-)引用。该类是基于类文件的jvm内部数据结构。我有一种感觉,你仍然混淆了类和实例…据我所知,当一个类被加载到内存中时,一个类的实例被创建,其中包含了关于加载的类的信息。我们可以通过编写ClassName.class来获取类的实例。所以,要从内存中卸载类,该类的实例应该由垃圾收集器收集。但这里有一个要点,当垃圾收集器销毁class的对象(由于类的加载而创建)时,如果对象丢失了所有引用,则通常一个对象符合垃圾收集器的条件。那么class的对象何时以及如何丢失了所有引用JDK提供的Java类(例如
Java.util.ArrayList
Java.math.BigIntege
r)是否完全卸载了?