usage not leaks leak exist example debug code avoid java memory-leaks go

not - ¿Go está sujeto a la misma memoria sutil, filtraciones que tiene Java?



memory leak java code (5)

Aquí están los hechos:

  • el idioma Go tiene un recolector de basura.

  • Java tiene una recolección de basura

  • muchos programas Java tienen (sutiles o no) pérdidas de memoria

Como ejemplo de un programa Java que tiene fugas de memoria (no es para corazones débiles, la pregunta puede sacudir sus creencias), consulte aquí un pequeño programa Java llamado Tomcat que incluso tiene un botón "Buscar fugas": ¿Hay alguna manera? para evitar pérdidas de memoria de abandono en Tomcat?

Entonces me pregunto: ¿los programas escritos en Go exhibirán el mismo tipo de pérdidas de memoria (sutiles o no) que algunos programas escritos en Java exhiben?


Aquí está mezclando niveles de abstracción: las pérdidas de memoria se deben a errores en la biblioteca (donde los objetos se referencian entre sí mediante cadenas de ''a guarda referencia a b'' así como una compensación en la implementación del recolector de basura entre eficiencia y Exactitud. ¿Cuánto tiempo desea dedicar a descubrir tales bucles? Si gasta el doble, podrá detectar bucles dos veces más largos.

Entonces, el problema de la pérdida de memoria no es específico del lenguaje de programación, no hay ninguna razón por la cual GO sea mejor o peor que Java.


Es muy posible que los programas Go presenten fugas de memoria. La implementación actual de Go tiene un simple recolector de basura marca y barrido. Esto solo tiene la intención de ser una solución temporal y no pretende ser el recolector de basura a largo plazo. Vea esta page para más información. Mire debajo del encabezado Go Garbage Collector . Esa página incluso tiene un enlace para codificar la versión actual si así lo desea.


Estás confundiendo diferentes tipos de pérdidas de memoria aquí.

Las fugas de memoria a base de gestión explícita y atroces se han ido en Java (o en cualquier otro lenguaje basado en GC). Estas filtraciones son causadas por perder completamente el acceso a trozos de memoria sin marcarlos como no utilizados.

Las "pérdidas de memoria" todavía presentes en Java y en cualquier otro idioma en la faz del planeta hasta que la computadora pueda leer, nuestras mentes todavía están con nosotros, y lo estarán en el futuro previsible. Estas filtraciones son causadas por el código / programador manteniendo referencias a objetos que técnicamente ya no son necesarios. Estos son fundamentalmente errores de lógica, y no se pueden evitar en ningún idioma utilizando las tecnologías actuales.


Recolección de basura o no, puede escribir un programa que tenga fugas de memoria en Java, Go o cualquier otro idioma en su mayor parte.

Garbage Collection le quita parte de la carga al programador, pero no evita las filtraciones por completo.


Una ''pérdida de memoria'' es cuando una pieza de memoria que el programador pensó que se liberaría no se libera. Esto puede suceder en cualquier idioma, basura recolectada o no. La causa habitual en los lenguajes de GC es retener una referencia adicional a la memoria.

"Los idiomas no causan pérdidas de memoria, los programadores causan pérdidas de memoria".