Aumentar el tamaño de almacenamiento dinámico en Java


276

Estoy trabajando en un servidor Windows 2003 (64 bits) con 8 GB de RAM. ¿Cómo puedo aumentar el máximo de memoria de almacenamiento dinámico? Estoy usando la -Xmx1500mbandera para aumentar el tamaño del montón a 1500 Mb. ¿Puedo aumentar la memoria de almacenamiento dinámico al 75% de la memoria física (almacenamiento dinámico de 6 GB)?


2
¿Lo has intentado -Xmx6g? ¿Esto no funcionó? ¿Qué observaste?
oxbow_lakes

2
¿Supongo que intentaste aumentar el montón pero fallaste? ¿Estás utilizando una JVM de 64 bits?
Bart Kiers

Gracias por comentar, pero esto no funciona
Sunil

Bueno, ¿cómo sabes que no está funcionando? ¿La JVM no se inicia?
oxbow_lakes

Respuestas:


327

Puede aumentar a 4 GB en un sistema de 32 bits. Si está en un sistema de 64 bits, puede ir más alto. No debe preocuparse si ha elegido incorrectamente, si solicita 5 g en un sistema de 32 bits, Java se quejará de un valor no válido y se cerrará.

Como otros han publicado, use las banderas de línea cmd, por ejemplo

java -Xmx6g myprogram

Puede obtener una lista completa (o una lista casi completa, de todos modos) escribiendo java -X.


16
Según mi experiencia, el tamaño de almacenamiento dinámico real que Java aceptará usando una VM de 32b (en un sistema de 32b o 64b; la VM es la parte importante, aquí), es de alrededor de 2G. Además, el sorprendido autor de la pregunta no
buscó

2
ah, tiene razón, por supuesto: en un sistema de 32 bits solo puede direccionar 2 Gb de memoria.
Steve B.

¿Es necesario que el montón máximo y el tamaño mínimo del montón sean iguales?
user1747935

1
No. Pero la gente lo hace comúnmente porque la JVM nunca puede perder el tiempo cambiando el tamaño. Dudo que importe mucho, TBH.
Steve B.

1
@PhilipRego lo configura a lo que quiera, hasta los límites que la JVM puede abordar. -Xmx2G establece tu memoria en 2G (también mira -Xms). Esto no dice nada sobre la cantidad de memoria que necesitará.
Steve B.

155

Es posible aumentar el tamaño de almacenamiento dinámico asignado por la JVM mediante el uso de opciones de línea de comandos. Aquí tenemos 3 opciones

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

En la línea anterior, podemos establecer el almacenamiento dinámico mínimo en 16 MB y el almacenamiento dinámico máximo en 64 MB


28

En una JVM de 32 bits, el tamaño de almacenamiento dinámico más grande que puede establecer teóricamente es de 4 gb. Para usar un tamaño de almacenamiento dinámico más grande, debe usar una JVM de 64 bits. Intenta lo siguiente:

java -Xmx6144M -d64

El indicador -d64 es importante ya que le dice a la JVM que se ejecute en modo de 64 bits.


Gracias jefe, pero no funciona en mi sistema, hay algo más que me estoy perdiendo
Sunil

44
Definir "no funciona". ¿No se inicia y te da un error? ¿Comienza pero usa un tamaño de almacenamiento dinámico diferente?
Kevin

11

Es posible aumentar el tamaño de almacenamiento dinámico asignado por la JVM en eclipse directamente En eclipse IDE goto

Ejecutar ----> Ejecutar configuraciones ----> Argumentos

Ingrese -Xmx1g (Se usa para establecer el tamaño máximo como Xmx256m o Xmx1g ...... m -> mb g ---> gb)


3
Solo agregar esto debería ser un argumento de VM (eclipse le ofrece dos opciones).
Matt Boyle

11

java -d64 -Xms512m -Xmx4g HelloWorld

donde, -d64: habilitará JVM de 64 bits -Xms512m: establecerá el tamaño de almacenamiento dinámico inicial como 512 MB -Xmx4g: establecerá el tamaño de almacenamiento dinámico máximo como 4 GB (aquí el nombre del archivo Java es: HelloWorld.java)


9

Puede aumentar el tamaño de almacenamiento dinámico pasando los parámetros JVM -Xms y -Xmx como se muestra a continuación:

Para archivos jar:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Para archivos Java:

 java -Xms4096M -Xmx6144M ClassName

Los parámetros anteriores aumentan InitialHeapSize (-Xms) a 4GB (4096 MB) y MaxHeapSize (-Xmx) a 6GB (6144 MB).

Pero, el Tamaño de almacenamiento dinámico de la generación joven seguirá siendo el mismo y el Tamaño de almacenamiento dinámico adicional se agregará al Tamaño del almacenamiento dinámico de generación anterior . Para igualar el tamaño de Young Gen Heap y Old Gen Heap , use -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy params.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: NewRatio = Tamaño de montón de generación anterior: Tamaño de pila de generación joven (puede jugar con esta proporción para obtener la proporción deseada).


7

¿Puedo aumentar la memoria del montón al 75% de la memoria física (montón de 6 GB)?

Sí tu puedes. De hecho, puede aumentar a más de la cantidad de memoria física, si lo desea.

Si es una buena idea hacer esto depende de cuánto más se esté ejecutando en su sistema. En particular, si el "conjunto de trabajo" de las aplicaciones y servicios que se están ejecutando actualmente excede significativamente la memoria física disponible, su sistema es susceptible de "sacudirse", pasando mucho tiempo moviendo páginas de memoria virtual hacia y desde el disco. El efecto neto es que el sistema se vuelve terriblemente lento.


Gracias por tu comentario Pero, ¿cómo puedo aumentar? Por favor, ¿puedes darme el comando?
Sunil

Prueba -Xmx6000m. Debería funcionar si está utilizando una versión de Java de 64 bits.
Stephen C

3
¿Estás seguro de que estás ejecutando una versión de Java de 64 bits? ¿En un sistema operativo de 64 bits?
Stephen C

4

Utilice el siguiente comando para cambiar el tamaño de almacenamiento dinámico a 6 GB

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"

Si tengo memoria 8G en mi sistema y puedo ver desde el administrador de tareas que siempre está usando el 70% de eso; ¿Es posible asignar memoria 6G al tamaño de almacenamiento dinámico de Java?
Reihan_amn

1
@Reihan_amn Sí y no, si excedes tu memoria, irá a paginación, que está en el disco y es increíblemente lenta. Si excedes los archivos de la página, entonces estás en un mal momento.
CodeMonkey

2

Varias personas señalaron las respuestas específicas para el tamaño del montón con las opciones jvm de -Xmsy -Xms. Quiero señalar que este no es el único tipo de opciones de memoria para la jvm. Específicamente, si obtiene una pila sobre flujos, entonces querrá aumentar el tamaño de la pila agregando una opción adicional como -Xss8m.

Para este problema, las opciones jvm de algo así -Xms2g -Xmx6g -Xss8mserían una solución.

Estoy compartiendo esta información, ya que mis búsquedas en Google sobre cómo aumentar la memoria jvm me llevaron a esta solución, y las soluciones no funcionaron con grandes cantidades de asignación de memoria. Una vez que descubrí para qué eran las configuraciones específicas, pude buscar en Google cómo aumentar el tamaño de la pila y encontré el parámetro faltante. :) Espero que esto ahorre tiempo a otros, como me hubiera ahorrado un montón de tiempo. :)


2

Esto solo funciona con la versión de 64 bits de Java. Vaya al Panel de control y haga clic en el icono de Java. En la pequeña ventana del Panel de control de Java, haga clic en la barra de menú de Java y luego haga clic en el viewbotón.

Si tiene dos plataformas Java, desactive la versión anterior de Java, luego haga clic en el campo de texto Parámetros de tiempo de ejecución y escriba -Xmx1024mo menos que el tamaño de RAM. No aumente el tamaño de almacenamiento dinámico igual a RAM, de lo contrario su sistema se bloqueará.


Si hace que el tamaño de almacenamiento dinámico sea igual a la RAM, el sistema no se bloqueará. En cambio, el sistema comenzará a paginar y se volverá agradable y lento.
DaveTheMinion

0

Si. Usted puede.

Puede aumentar su memoria de almacenamiento dinámico al 75% de la memoria física (almacenamiento dinámico de 6 GB) o superior.

Como está utilizando 64 bits, puede aumentar el tamaño de su montón a la cantidad deseada. En caso de que esté utilizando 32 bits, está limitado a 4 GB.

$ java -Xms512m -Xmx6144m JavaApplication

Establece un tamaño de almacenamiento dinámico inicial de 512 MB y un tamaño de almacenamiento máximo máximo de 6 GB.

Espero eso ayude.. :)


Esto parece muy similar a las dos respuestas mejor votadas publicadas unos años antes.
Bernhard Barker

0

Tengo problemas para ejecutar los archivos py en mi código java usando eclipse / STS, obteniendo PyException debido a la memoria insuficiente de almacenamiento dinámico jvm. He realizado los cambios como se menciona a continuación y puedo resolver este problema. A continuación se muestra la configuración de mi sistema.

ingrese la descripción de la imagen aquí

Y estos son los cambios que hice en mi espacio de trabajo y listo, ahora funciona perfecto.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.