Estoy explorando el uso de la memoria en Java para entender por qué mi programa pierde memoria. Después de quitar el código en mi ciclo while principal, todavía tengo un aumento en el uso de la memoria a lo largo del tiempo. Reflexionando sobre el uso de memoria de un programa vacío:¿Por qué un programa Java vacío consume memoria?
class Nothing
{ public static void main(String[] args)
{ while(true); }
}
Todavía se registró un aumento de la memoria:
Así que mi pregunta es: ¿Por qué hay todavía un patrón de diente de sierra? ¿Por qué cuando se ejecuta el GC no guarda toda la memoria (cada vez que se ejecuta el gc (los valles) la memoria utilizada aumenta en 10-20 Kb (en comparación con el valle anterior))?
EDIT:
java version "1.6.0_29"
Java (TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot (TM) VM cliente (construir 20.4-b02, mixed mode, sharing)
SO: Windows 7 Enterprise-32 bits
No veo un aumento. La memoria sube, luego se acumula.Parece que la memoria máxima utilizada es constante a lo largo del tiempo. –
Otra herramienta para buscar la pérdida de memoria en su aplicación es [Plumbr] (http://plumbr.eu). Debería ser mucho más fácil que luchar con los perfiladores e intentar deducir algo de toda esa información. – Nikem