是否有可能以编程方式销毁静态变量?

时间:2015-01-13 05:39:18

标签: java

我想以编程方式销毁静态对象。可能吗?如果是,那么我怎样才能做到这一点。请建议。

5 个答案:

答案 0 :(得分:11)

您需要了解的是 - 引用是静态的,对象不是。通过这个,我的意思是说,在

static SomeClass someClassInstance = new SomeClassInstance();

静态属性位于引用 someClassInstance上,GC作用于实例/对象

someClassInstance =null将使第一个SomeClassInstance符合GC条件。

答案 1 :(得分:1)

如果通过" destroy"你的意思是摆脱对象本身,这很容易。

假设您的对象在类ExampleClass中定义如下

public class ExampleClass{
    public static Object toBeDestroyed;
}

你只需要做这样的事情

ExampleClass.toBeDestroyed = null;

第一行删除对象的引用(假设没有其他人使用它)。垃圾收集器将在对象上调用finalize()并释放内存。

答案 2 :(得分:0)

根据定义,每个类定义一次静态变量,并且(如果声明为final)具有不可变值...并且不能被"销毁"。

你真的想做什么?

答案 3 :(得分:0)

java中的

我不认为你可以销毁变量,如果你真的想要释放内存空间那么JVM就是收集或释放未使用变量的内存的那个。此过程称为垃圾回收。这该怎么做?请参阅:https://stackoverflow.com/a/1567996/1904479

答案 4 :(得分:0)

你无法销毁静态变量。每个人都可以在不声明类实例的情况下访问静态变量。它是一个共享的记忆概念。你可以阅读,如果你有足够的权限可以改变。

因此,您需要将null或空值等分配给该变量。你必须做一些技巧来维护或检查是否设置了该变量。您可以设置一个标志来检查值是否存在。

您可以从Where are static class variables stored in memory?static allocation in java - heap, stack and permanent generation

获取更多信息