Tengo un pequeño Java application que escribí para registrar mis actividades laborales. Como lo tengo abierto todo el día, todos los días, una de las cosas que originalmente me preocupaba en cuanto a la elección del idioma es la cantidad de memoria que usaría.¿Por qué hay una gran diferencia en el uso de la memoria de una aplicación Java en Windows XP 32 vs Windows 7 64
Afortunadamente, en Windows XP yo normalmente consumiría unos 5 MB cuando se minimiza y 12 o así cuando se maximiza, y felizmente se ejecuta con -Xmx5M
(consumo de memoria según el Administrador de tareas de Windows).
Cuando he actualizado mi PC en casa con un hardware más nuevo, y al mismo tiempo, a Windows 7 64, (aunque he instalado y estoy usando la JVM de 32 bits), que tomó nota de inmediato que la JVM para esta aplicación ahora informa 68 MB + siempre ... y eso es con -Xmx5M -Xss16K
, de acuerdo con el "Conjunto de trabajo" del Administrador de tareas.
Tanto las máquinas antiguas como las nuevas tenían/tenían 4 GB de RAM, de los cuales 512 MB se usan por video. Ambos ejecutaban compilaciones recientes de Java 6, sobre la actualización 15 para WinXP y ahora la actualización 24 para Win7. La huella de la aplicación en el disco es de 70 K en 12 clases. Además, mi computadora de trabajo todavía es Windows XP, ejecutando Java 6_24, y muestra aproximadamente 12 MB para esta aplicación idéntica, y por idéntico quiero decir literalmente eso, ya que los dos sistemas están sincronizados para todas mis herramientas de desarrollo.
Como desarrollador, necesito entender las razones por las que mis aplicaciones parecen masticar tanta memoria.
¿Alguien puede arrojar algo de luz sobre esto, y sugerir cómo reducir significativamente la huella de memoria para una aplicación Java 6?
Editar
La respuesta puede ser en un tamaño excesivo PermGen. De acuerdo con JVisualVM, tengo un montón de:
Tamaño: 5,2 MB, Utilizado: 4,3 MB (pico) y Asignado de 6,2 MB.
pero para el PermGen
Tamaño: 12,5 MB, Usado: 4,6 MB (pico) y Asignado 67,1 MB.
lo tanto, es posible que los 68 MB que se muestran en el Administrador de tareas de Windows 7 es simplemente solicita a la memoria virtual, pero sin asignar?
EDIT 2
Reducir PermGen a 12 MB no tuvo ningún efecto sobre la memoria RAM proceso, pero jvisualvm lo demostró reducido (al parecer 12 MB que constituye una especie de mínimo, porque ir más bajo que el no tuvo ningún efecto en JVVM).
¿Qué opciones usó para limitar el tamaño de la ondulación permanente generación? –