【问题标题】:does java Java has manual garbage collection?java Java有手动垃圾收集吗?
【发布时间】:2017-05-10 18:43:13
【问题描述】:

好的,今天我参加了一次面试,多年来我一直在编写 Java 代码。采访中说“Java 垃圾收集是一个棘手的问题,我很少有朋友一直在努力解决这个问题。你在这方面做得如何?”。她是想骗我吗?还是我的一生都是谎言而java没有自动垃圾收集?

因为据我所知 java 具有自动垃圾收集功能,您可以调用 System.gc() 来收集一些资源,但这不会强制对象被销毁。还是由JVM决定的。

我错了吗?

【问题讨论】:

  • 你在谷歌上搜索过这个吗?
  • 是的,它说它是自动的。但我对此越来越偏执了
  • 仍然不推荐手动调用GC:link
  • 如果我是你,我只会要求澄清“你在这方面做得如何?”方法。也许面试官的意思是问你是否能够诊断内存泄漏,或者选择最好的 GC 算法,或者调整 GC。但问“你在这方面做得如何?”坦率地说,这是一个非常糟糕的问题。
  • 也许是“你在这方面做得如何?”的正确答案。会是“很好。谢谢。”真正奇怪的不是面试官的陈述,而是你显然没有问这到底是什么意思就走了。

标签: java garbage-collection garbage


【解决方案1】:

仅仅因为垃圾收集是自动的,并不意味着您可以完全忽略对象分配和清理以及 GC 工作原理的含义。

对于许多应用程序,尤其是简单的应用程序,让 GC 完成它就可以了。尽管即便如此,您也必须确保您持有参考资料的时间不会超过需要的时间。

随着您的应用程序变得越来越大和越来越复杂,尤其是在您使用任何多线程时,GC 带来的影响变得更加令人担忧,因此了解代码中的一切工作方式以及 GC 的作用变得更加重要正在做。

【讨论】:

    【解决方案2】:

    GC 是自动的,是的。
    但是一些与 GC 相关的做法可能很微妙,因此应该了解和理解以避免内存泄漏或不良行为。

    例如:finalize()

    在垃圾回收时由对象上的垃圾回收器调用 确定没有更多对该对象的引用

    根据 javadoc,但实际上它永远不会被调用。

    其他示例:GC 收集删除不再引用的对象,但您可能有一个不再需要但仍被引用对象引用的“重”对象。因此,重物将不符合收集条件。
    使用 JVisualVM 之类的监控工具有时会出现一些意外,我说:啊,这里还是引用了这个大对象……

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2016-03-26
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      相关资源
      最近更新 更多