当前位置: 首页 > 面试题库 >

何时垃圾收集

颛孙昆
2023-03-14
问题内容

我有一段代码可以在内存中加载很大的图像。所以打电话似乎是合理的事情

System.gc();

在加载图像之前。据我所知,它毫无问题。

昨天,我决定使用一个名为FindBugs的非常有用的软件来扫描您的代码并报告可能导致错误或通常不建议使用的策略的问题。问题是我提到的这段代码得到了报告。描述是这样的:

…强迫垃圾收集;除了基准测试代码外,都非常可疑

并继续阐述:

代码显式调用垃圾回收。除了基准测试中的特定用途外,这非常可疑。

过去,人们在诸如close或finalize方法之类的例程中明确调用垃圾收集器的情况导致了巨大的性能黑洞。垃圾收集可能很昂贵。任何导致成百上千个垃圾收集的情况都将使计算机崩溃。

所以我的问题是: 在这种情况下,以编程方式调用垃圾收集器不是可以的吗?
我的代码只调用一次,并且它所使用的方法很少使用。如果调用它不行,那么在需要大量内存的操作之前,如果需要尽可能多的内存,并且在此之前需要释放尽可能多的内存,该怎么办?


问题答案:

您使用System.gc()获得了任何性能改进吗?我不这么认为,因为在加载图像之前,您可能不需要收集很多对象。

通常,现代垃圾收集器最了解何时运行,因此,除非您有非常确实的理由,否则您不应该强行收集垃圾。(例如,该插件建议的基准测试应用程序

顺便说一句:调用System.gc()建议VM执行“完整”或“大型”集合,这意味着所有线程都将很快停止。否则,它可能只会进行“小型”垃圾收集,不会停止所有线程。

使用-verbose:gc运行程序以查看收集了多少字节。

这里也有很多有关垃圾收集的技术信息:http
:
//java.sun.com/developer/technicalArticles/Programming/GCPortal/



 类似资料:
  • Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经有但以后不再拥有 Owner 了。 注意:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 Owner 和 Dependent 一些 Kubernetes 对象是其它一些的 Owner。例如,一个 ReplicaSet 是一组 Pod 的 Owner。具有 Owner 的对象被称为是 Owner

  • 垃圾回收 我们对生产中花了很多时间来调整垃圾回收。垃圾回收的关注点与Java大致相似,尽管一些惯用的Scala代码比起惯用的Java代码会容易产生更多(短暂的)垃圾——函数式风格的副产品。Hotspot的分代垃圾收集通常使这不成问题,因为短暂的(short-lived)垃圾在大多情形下会被有效的释放掉。 在谈GC调优话题前,先看看这个Attila的报告,它阐述了我们在GC方面的一些经验。 Scal

  • 对于开发者来说,JavaScript 的内存管理是自动的、无形的。我们创建的原始值、对象、函数……这一切都会占用内存。 当我们不再需要某个东西时会发生什么?JavaScript 引擎如何发现它并清理它? 可达性(Reachability) JavaScript 中主要的内存管理概念是 可达性。 简而言之,“可达”值是那些以某种方式可访问或可用的值。它们一定是存储在内存中的。 这里列出固有的可达值的

  • 垃圾收集,引用计数,显式分配 和所有的现代语言一样,OCaml提供垃圾收集器,所以你不用像C/C++一样显式地分配和释放内存。 JWZ在他的文章 "Java sucks" rant(Java蛋疼(怒)!): 第一个好家伙是Java没有 free()。其他的都没有所谓了。这几乎掩盖了所有的缺点,不管有多糟糕, 这个有点让后续文档基本都没有意义了,但是...(译注:但是啥大家自己看吧) OCaml的垃

  • 问题内容: 有人可以解释一下G1垃圾收集器的工作原理吗?我还无法在任何地方找到任何全面,易于理解的描述。 谢谢 问题答案: 收集器将堆分成固定大小的区域,并跟踪这些区域中的实时数据。它将一组指针(“记住的集”)保留在区域内和区域外。当认为有必要使用GC时,它将首先收集实时数据较少的区域(因此,“垃圾优先”)。通常,这意味着一步就可以收集整个区域:如果进入一个区域的指针数量为零,则无需对该区域进行标

  • 本文向大家介绍Java垃圾收集,包括了Java垃圾收集的使用技巧和注意事项,需要的朋友参考一下 示例 C ++方法-新增和删除 在像C ++这样的语言中,应用程序负责管理动态分配的内存所使用的内存。当使用new运算符在C ++堆中创建对象时,需要相应地使用delete运算符来处置该对象: 如果程序忘记了delete一个对象而只是“忘记”了该对象,则关联的内存将丢失给应用程序。这种情况的术语是内存泄