Go是否受到与Java相同的微妙内存泄漏的影响?

2022-08-31 11:18:26

以下是事实:

  • 语言Go有一个垃圾回收器。

  • Java有一个垃圾回收

  • 许多Java程序都有(微妙或没有)内存泄漏

作为内存泄漏的Java程序的一个例子(不是为了胆小的人,这个问题可能会动摇你的信念),请参阅这里关于一个名为Tomcat的小Java程序,它甚至有一个“查找泄漏”按钮:有没有办法避免Tomcat中的取消部署内存泄漏?

所以我想知道:用Go编写的程序是否会表现出与Java编写的某些程序相同的(微妙或不微妙的)内存泄漏?


答案 1

您在这里混淆了不同类型的内存泄漏。

令人发指的、基于显式内存管理的内存泄漏在Java(或任何其他基于GC的语言)中消失了。这些泄漏是由于完全无法访问内存块而没有将其标记为未使用而导致的。

在Java和地球上所有其他语言中仍然存在“内存泄漏”,直到计算机能够读取我们的思想仍然与我们同在,并且在可预见的未来。这些泄漏是由代码/程序员保留对技术上不再需要的对象的引用引起的。从根本上说,这些都是逻辑错误,使用当前技术在任何语言中都无法阻止。


答案 2

Go程序很可能会出现内存泄漏。Go 的当前实现具有简单的标记和清除垃圾回收器。这仅用作临时解决方案,而不是作为长期垃圾回收器。有关详细信息,请参阅此页面。在标题下查看 。如果您愿意,该页面甚至具有指向当前版本代码的链接。Go Garbage Collector


推荐