Go会受到相同的微妙记忆

这里是事实:

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

  • Java有一个垃圾收集

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

  • 作为一个有内存泄漏的Java程序的例子(不是心存疑虑,这个问题可能会动摇你的信念),在这里看到一个叫做Tomcat的Java程序,它甚至有一个“find leaks”按钮:有没有办法避免在Tomcat中取消部署内存泄漏?

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


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

    基于显式内存管理的内存泄漏在Java(或任何其他基于GC的语言)中都没有了。 这些泄漏是由于完全失去对大量内存的访问而未将其标记为未使用而造成的。

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


    Go程序很可能会出现内存泄漏。 Go的当前实现有一个简单的标记和清理垃圾收集器。 这只是作为临时解决方案,并不是作为长期垃圾收集器。 请参阅此页面了解更多信息。 查看标题Go Garbage Collector 。 如果你愿意,该页面甚至可以链接到当前版本的代码。


    无论垃圾收集与否,您都可以编写一个程序,其中大部分内容都是Java,Go或任何其他语言的内存泄漏。

    垃圾收集确实会减轻程序员的负担,但并不能完全防止泄漏。

    链接地址: http://www.djcxy.com/p/3343.html

    上一篇: Is Go subject to the same subtle memory

    下一篇: How does PostgreSQL perform writes so much faster than SQLite?