【问题标题】:Is it possible to destroy static variables programmatically? [closed]是否可以以编程方式销毁静态变量? [关闭]
【发布时间】:2015-03-11 00:26:05
【问题描述】:

我想以编程方式销毁静态对象。可能吗?如果是,那么我该如何实现这一目标。请建议。

【问题讨论】:

  • 你说的“破坏”是什么意思?
  • 我的意思是释放运行时内存。
  • 然后将其设置为 null 并让垃圾收集器完成其工作。

标签: java


【解决方案1】:

您需要了解的是 - 引用是静态的,而对象不是。我的意思是,在

static SomeClass someClassInstance = new SomeClassInstance();

static 属性位于 reference someClassInstance 上,GC 作用于 instances / objects

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

【讨论】:

  • 实际上我正在执行一项内存密集型任务,我想在我的任务完成后立即清除内存。
  • @user2749218 - 实际上,明确尝试执行 GC影响您的应用程序的性能。它会减慢应用程序的速度。您应该会看到 VM 级别线程 的优先级。它们的优先级为 8、9、10 等。当 GC 运行时,您的应用将进入睡眠状态 不要这样做。让 GC 决定何时运行。
【解决方案2】:

如果你说的“破坏”是指摆脱对象本身,那就很容易了。

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

public class ExampleClass{
    public static Object toBeDestroyed;
}

你只需要这样做

ExampleClass.toBeDestroyed = null;

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

【讨论】:

  • System.gc() 确实调用垃圾收集器。它建议运行 GC。
  • 如果您需要调用 System.gc() - 不要。在确定何时应该运行 GC 时,VM 比你聪明得多。
  • 没有。就是不行。它绝不保证 GC 周期会运行,也不保证任何对象都会被销毁。任何对 System.gc() 的使用很可能代表您的代码从根本上损坏的地方。
  • @Kylar - 或者你正在尝试做某种微基准测试
  • @Kylar 我会相应地编辑我的建议。实际上我过去没有机会使用 System.gc() 并且知道我现在知道的我将来不会;谢谢你的建议。
【解决方案3】:

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

你真正想做什么?

【讨论】:

  • 静态变量不一定是不可变的。
  • 这应该是评论,而不是答案。
  • @ErstwhileIII - static final 变量在加载该类的类加载器被 GC 时被 GC。
  • @ErstwhileIII - 另外,static final 不会创建 instance immutablefinalimmutable 是两个不同的东西。除非您使用 primitivesimmutable 类。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    您不能破坏静态变量。每个人都可以在不声明类实例的情况下访问静态变量。它是一个共享内存概念。你可以阅读,如果你有足够的权限可以改变。

    因此,您需要将 null 或空值或类似的值分配给该变量。您必须对其进行一些技巧来维护或检查该变量是否已设置。您可以设置一个标志来检查值是否存在。

    您可以从Where are static class variables stored in memory?static allocation in java - heap, stack and permanent generation获得更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2017-12-30
      • 2015-07-09
      • 2011-09-21
      相关资源
      最近更新 更多