Syn*_*r0r 75 java memory-leaks go
以下是事实:
语言Go有一个垃圾收集器.
Java有一个垃圾收集
很多Java程序都有(细微的或没有)内存泄漏
作为一个有内存泄漏的Java程序的例子(不是为了胆小的人,这个问题可能会动摇你的信念),请看这里有一个叫做Tomcat的小程序,它甚至有一个"查找泄漏"按钮:有没有办法为了避免Tomcat中的部署内存泄漏?
所以我想知道:用Go编写的程序是否会出现与Java编写的某些程序相同的(细微的或不存在的)内存泄漏?
小智 40
你在这里混淆了不同类型的内存泄漏.
令人发指的,基于显式内存管理的内存泄漏在Java(或任何其他基于GC的语言)中消失了.这些泄漏是由完全失去对内存块的访问而不将其标记为未使用引起的.
Java中存在的"内存泄漏"以及地球上所有其他语言,直到计算机能够读懂我们的思想仍然存在,并且将在可预见的未来.这些泄漏是由代码/程序员保持对技术上不再需要的对象的引用引起的.这些基本上是逻辑错误,并且在使用当前技术的任何语言中都无法阻止.
是否收集垃圾,您可以编写一个程序,其中包含Java,Go或大多数其他语言的内存泄漏.
垃圾收集确实减轻了程序员的负担,但它并不能完全防止泄漏.
"内存泄漏"是指程序员认为将释放的一块内存未被释放.这可能发生在任何语言,垃圾收集与否.GC语言的常见原因是保留对内存的额外引用.
"语言不会导致内存泄漏,程序员会导致内存泄漏".
您在这里混合了抽象级别:内存泄漏是由于库中的错误造成的(其中对象相互引用,尽管“a 持有对 b”的引用,以及垃圾收集器实现中效率和效率之间的权衡)准确性。您想花多少时间来找出此类循环?如果您花费两倍的时间,您将能够以两倍的时间检测循环。
因此,内存泄漏问题不是特定于编程语言的,GO 本身没有理由比 Java 更好或更差。
| 归档时间: |
|
| 查看次数: |
12677 次 |
| 最近记录: |