我想以编程方式销毁静态对象。可能吗?如果是,那么我怎样才能做到这一点。请建议。
答案 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)
我不认为你可以销毁变量,如果你真的想要释放内存空间那么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
获取更多信息