Pregunta

Tengo una aplicación java en lugar de memoria hambre. En mis sistemas de 32 bits con Windows XP Professional la aplicación se acaba de funcionar bien si le doy -Xmx1280m. Todo a continuación va a terminar en una excepción java.lang.OutOfMemoryError: Java heap space.

Si funciono con la misma aplicación en un equipo con Windows XP Professional (todo lo demás exactamente el mismo) de 64 bits que requiere -Xms1400m para prevenir la condición OutOfMemory.

A mi entender, si tengo un programa en C y compilarlo de 32 bits y de 64 bits del versión de 64 bits se necesita más memoria porque los punteros son más anchas y así sucesivamente. En mi ejemplo java sin embargo, la máquina virtual (Sol) es el mismo y el código de bytes es el mismo.

¿Por qué necesita más memoria en la máquina de 64 bits?

¿Fue útil?

Solución

Probablemente porque el máquina virtual aplicación se diferencia entre la arquitectura de 32/64 bits de tal manera que consume más memoria (tipos más amplios, diferentes GC).

El código de bytes es irrelevante cuando pasa sobre las tareas en el sistema subyacente. No estoy seguro de que Java y la memoria de eficiencia son dos términos que pondría juntos todos modos: P

Otros consejos

A pesar de que el código de bytes es el mismo, la JVM convierte eso a código de máquina, por lo que tiene todas las mismas razones que C a requerir una huella de memoria más grande.

Es la misma razón por la que ya enumeradas para el programa C. El sistema de 64 bits utiliza direcciones de memoria de gran tamaño, haciendo que sea "más escapes" (creo que es el término que he oído utilizado para describirlo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top