2010-01-19 25 views

Respuesta

16

Teóricamente 2 , pero puede haber limitaciones (obviamente)

Según this FAQ sólo está limitado por la memoria y el espacio de intercambio en el sistema local:

en 64 bits máquinas virtuales, que tienen 64 bits de direccionabilidad para trabajar, lo que da como resultado un tamaño máximo de almacenamiento dinámico de Java limitado solo por la cantidad de memoria física y espacio de intercambio que proporciona su sistema.

Consulte también ¿Por qué no puedo obtener un montón más grande con la JVM de 32 bits?

Además, tenga en cuenta que debe establecer el montón máximo a través de la línea de comandos. Sin un comando -Xmx. sin ella, Java usa 64mb + 30% = 83.2mb como un montón máximo predeterminado en máquinas de 64 bits según las mismas preguntas frecuentes.

java -Xmx1000g myClass 

funciona bien en mi máquina. Pero aún no parece ser compatible con el modificador 't', por lo que no puede especificar la memoria máxima en terabytes todavía :)

+0

1000g trabajado para usted? Pensé que 'java' validaría si hay suficiente memoria antes de tomar esa opción. – asgs

13

Si pudiera convertir cada átomo del universo en un byte de RAM, podría asignarlo en un espacio de direcciones de 64 bits.

En realidad, es una ligera exageración.

Hay 10^80 átomos en el universo (según WolframAlpha), y 2^64 bytes de espacio de direcciones en un sistema de 64 bits, por lo que solo sería posible direccionar 1 de cada 5x10^60 átomos . Pero si tiene 18 qintillones de bytes de RAM, probablemente necesite un par de agujeros negros cuánticos para alimentarlo.

+0

@Stephen, edité la respuesta antes de publicar su comentario. ¡WolframAlpha gobierna! –

+2

¡No quisiera esperar una colecta completa sobre eso! – overthink

+4

Necesita 266 bits para indexar cada átomo en el universo –

0

En teoría es entre 2^63 y 2^64 bytes.

En la práctica, está limitado por la cantidad de memoria física y espacio de intercambio disponible en su máquina. Y la memoria física está a su vez limitada por su conjunto de chips (es decir, el número de pines de dirección en el bus de direcciones de la memoria física) y la placa base (es decir, el número y tamaño de los zócalos DIMM).

+2

Para AMD64, las especificaciones actuales prevén 40-52 pines de dirección. Además, admiten arquitecturas NUMA donde cada procesador tiene un trozo de memoria al que otros procesadores solo pueden acceder indirectamente. – MSalters

3

Esto probablemente dependa del sistema en el que se esté ejecutando su VM. Si está ejecutando una arquitectura AMD x64, el espacio de direcciones de los procesadores actualmente enviados usa 48 Bits, no 64. Esto da como resultado un máximo teórico de aproximadamente 256 TB. (Ver http://en.wikipedia.org/wiki/X86-64)

No soy un especialista en máquinas virtuales, pero cualquier sistema operativo moderno normalmente dará tanta memoria como RAM física más memoria virtual disponible. Probablemente eso es lo que la VM pasará a su aplicación dependiendo de su configuración.

+3

El manual de AMD pertinente establece que el espacio de direcciones virtuales es, de hecho, 64 bits (Capítulo 2.2.1, Manual del programador de arquitectura AMD64, v3.14, septiembre de 2007) – MSalters

2

Con las máquinas virtuales recientes de Sun, el tamaño de límite de montón práctico suele ser 512 veces la memoria física y/o virtual disponible. Incluso si el límite teórico es mucho mayor, la máquina virtual asignará 1 byte para propósitos de matriculación por cada 512 bytes de memoria de pila al inicio, por lo que 1TB de pila requerirá inmediatamente 2 GB para la gestión de la memoria.

+0

¿Puede citar una referencia? – Fakrudeen

+0

¿Una referencia para qué? – jarnbjo

+0

512 veces lo que ... – Fakrudeen

Cuestiones relacionadas