当前位置: 首页 > 知识库问答 >
问题:

javaJava有手动垃圾收集吗?

翟淮晨
2023-03-14

好的,今天我接受了一次采访,多年来我一直在Java编码。采访说“Java垃圾回收机制是一个棘手的问题,我有几个朋友一直在努力弄清楚。你在这方面做得怎么样?”。她是想欺骗我吗?还是我的一生都是谎言,java没有自动垃圾回收机制?

因为据我所知,java有自动垃圾回收机制,你可以调用System.gc()来收集一些资源,但这并不强制对象被销毁。它仍然由JVM决定。

我说错了吗?

共有2个答案

施赞
2023-03-14

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

例如:完成()

当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用

根据javadoc,但实际上它永远无法被调用

其他示例:GC收集删除不再被引用的对象,但您可能有一个不再需要但仍被引用对象引用的“重”对象。所以重物不会被收集起来
像JVisualVM这样使用监控工具有时会带来一些惊喜,我说:啊,这里仍然引用了这个大对象。。。

赏开宇
2023-03-14

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

对于许多应用程序,特别是简单的应用程序,只让GC做它该做的事情就可以了。尽管如此,你必须确保你持有参考资料的时间不超过需要的时间。

随着应用程序变得越来越大越来越复杂,尤其是在使用多线程的情况下,GC带来的影响变得越来越令人担忧,了解代码中的一切是如何工作的以及GC在做什么变得越来越重要。

 类似资料:
  • 我正在做一个与JVM GC相关的项目,我计划用我的手动GC取代JVM自动GC。 我知道JAVA有一个自动垃圾收集器。如果我们集成一个新的手动垃圾收集器,其中开发人员需要显式地调用new并删除对象(如在C中)。 让我们假设程序员在没有内存泄漏的情况下写入空闲。 使用手动垃圾回收机制代替自动垃圾回收机制是否有效? 在工业中使用手动GC是否常见?还是程序员到处使用自动垃圾回收器?

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

  • 问题内容: 我有一个奇怪的疑问。我知道垃圾收集器有其自身的局限性。如果分配不正确,则可能导致应用程序以异常方式响应。 所以我的问题是,在每个活动结束时强制调用垃圾回收器()是良好的编程习惯吗? 更新资料 每个人都说调用system.gc()根本没有好处。然后,我想知道为什么它出现在这里。DVM将决定何时运行垃圾收集器。那么,该方法需要什么? 更新2 感谢社区的帮助。但老实说,我从此链接中获得了有关

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

  • JavaScript 具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。 而在C 和C++之类的语言中,开发人员的一项基本任务就是手工跟踪内存的使用情况,这是造成许多问题的一个根源。在编写JavaScript 程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理。这种垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其

  • 问题内容: 我想向JVM注册一个回调,所以我知道何时进行垃圾回收。有什么办法吗? 编辑:我想这样做,以便可以在应用程序日志中发生垃圾收集时注销,这样我就可以查看它是否与我所看到的问题相关。启用- Xloggc很有帮助,但是将GC日志中的时间(自应用程序启动以来使用秒数)整合到我的主应用程序日志中有点棘手。 编辑2012年4月:从Java7u4开始,您可以从GarbageCollectorMXBea