【问题标题】:Java garbage collectorJava 垃圾收集器
【发布时间】:2011-11-07 17:03:35
【问题描述】:

有没有办法只为一种类型设置垃圾收集器,就像在 Objective C 中当你做 [Oppsie release]; 或者在 Java 中是否有类似的方式。我正在考虑将Oppsie 设置为null,但我认为它与发布不相似。

有什么建议吗?

【问题讨论】:

  • 很少需要将字段或变量显式设置为空。将其设置为另一个值,或者允许局部变量超出范围通常是一个更好的主意。

标签: java objective-c garbage-collection release


【解决方案1】:

一旦将 Oppsie 设置为 null 并且任何其他引用都无法再访问,Java 会将其设置为不可访问并将其标记为垃圾回收。您将无法再引用它,Java 最终会对其进行 GC。

【讨论】:

  • 我将它设置为 null 一次之后,如果我将 Oppsie 设置为其他值会发生什么?
  • 如果您将 Oppsie 设置为其他值,则新值将可以访问,而旧值仍将被垃圾回收
  • 非常感谢您的解释!
【解决方案2】:

如果这是一个 Java 问题,那么答案是:不要担心垃圾收集!

确保您不再需要的对象没有被任何实时变量引用,这很好!如果您在 99% 的时间内遇到任何与 GC 相关的异常,您都有机会通过优化代码来修复它。同样,不要调用垃圾回收,也不要担心。

【讨论】:

  • 我的问题是 javaw.exe 总是需要越来越多的空间。垃圾收集器可以帮忙吗?
【解决方案3】:

我不确定您将垃圾收集器设置为 null 仅针对一种类型是什么意思。您的建议(通过将 Oppsie 设置为 null)将 INSTANCE 设置为 null,与类型无关...

无论如何,简短的回答是不,如果你的意思是一个类或类似的东西,你不能将垃圾收集器设置为“一种类型”。一旦对象没有对其进行引用,它将自动标记为 GC。你可以建议java触发GC,但不保证会发生。

【讨论】:

  • “设置和实例为空”没有意义。一个实例是,直到它被垃圾收集。现在,有对实例的引用(变量、对象字段、数组项等),这些可以更改为 null,即不再引用任何实例。
  • 实际上我需要释放 Oppsie 占用的内存。在 Objective C 中它是 [Oppsie release],我问是否有办法只为 Oppsie 执行此操作。但第二件事是如果我做 Oppsie=null;然后我设置 Oppsie=error; //两者都是例外,在第一点将Oppsie设置为null是否有意义?
  • @Bombastic 这取决于您的对象所在的范围。如果它的范围比您当前的方法更广并且您想要释放它,那么显式空值是有意义的,否则一旦超出范围它由 GC 自动处理。见ibm.com/developerworks/java/library/j-jtp01274/index.html
  • @Bombastic 将 Oppsie 设置为 null 然后将其设置为其他变量没有任何意义。如果您重新分配 Oppsie 或将其设置为 null 然后设置为另一个值,则会出现相同的结果。
猜你喜欢
  • 1970-01-01
  • 2010-12-13
  • 2011-01-06
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2018-12-30
相关资源
最近更新 更多