Is Go subject to the same subtle memory

Here are the facts:

  • the language Go has a garbage collector.

  • Java has a garbage collection

  • a lot of Java programs have (subtle or not) memory leaks

  • As an example of a Java program that has memory leaks (not for the faint of heart, the question may shake your beliefs), see here about a little Java program called Tomcat that even has a "find leaks" button: Is there a way to avoid undeployment memory leaks in Tomcat?

    So I am wondering: will programs written in Go exhibit the same kind of (subtle or not) memory leaks that some programs written in Java exhibit?


    You are confusing different types of memory leaks here.

    The heinous, explicit-memory-management based memory leaks are gone in Java (or any other GC based language). These leaks are caused by completely losing access to chunks of memory without marking them as unused.

    The "memory leaks" still present in Java and every other language on the face of the planet until the computer can read our minds are still with us, and will be for the foreseeable future. These leaks are caused by the code/programmer keeping references to objects which are technically no longer needed. These are fundamentally logic bugs, and cannot be prevented in any language using current technologies.


    It's very possible that Go programs will exhibit memory leaks. The current implementation of Go has a simple mark-and-sweep garbage collector. This is only intended as a temporary solution and is not intended as the long term garbage collector. See this page for more info. Look under the header Go Garbage Collector . That page even has a link to code for the current version if you are so inclined.


    Garbage collection or not, you can write a program that has memory-leaks in Java, Go, or any other language for the most part.

    Garbage Collection does take some of the burden off the programmer but it does not prevent leaks entirely.

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

    上一篇: 为什么堆内存使用率和加载的类数不断增加?

    下一篇: Go会受到相同的微妙记忆