Pregunta Aumento del tamaño máximo de almacenamiento dinámico de JVM para aplicaciones con uso intensivo de memoria


Necesito ejecutar una aplicación de memoria de Java que utiliza más de 2 GB, pero estoy teniendo problemas para aumentar el tamaño máximo del montón. Hasta ahora, he intentado los siguientes enfoques:

  • Establecer el parámetro -Xmx, p. -Xmx3000m. Este enfoque fracasa en la creación de la JVM. Por lo que he buscado en Google, parece que -Xmx debe tener menos de 2GB.

  • Utilizando el -XX: + opción AggressiveHeap. Cuando intento este enfoque, aparece un error de "Falta de memoria suficiente" que indica que el tamaño del almacenamiento dinámico es de 1273,4 MB, aunque mi computadora tiene 8 GB de memoria.

¿Hay algún otro enfoque que pueda intentar aumentar el tamaño máximo de almacenamiento dinámico de la JVM? Aquí hay un resumen de las especificaciones de la computadora:

  • Sistema operativo: Windows 7 (64 bit)
  • Procesador: Intel Core i7 (2,66 GHz)
  • Memoria: 8 GB
  • java -version:
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

73
2018-06-12 22:05


origen


Respuestas:


Obtenga una JVM de 64 bits de Oráculo.


43
2018-06-12 22:18



Cuando está utilizando JVM en modo de 32 bits, el tamaño máximo de almacenamiento dinámico que se puede asignar es de 1280 MB. Entonces, si quiere ir más allá, necesita invocar JVM en modo 64.

Puedes usar lo siguiente:

$ java -d64 -Xms512m -Xmx4g HelloWorld

dónde,

  • -d64: habilitará la JVM de 64 bits
  • -Xms512m: configurará el tamaño de almacenamiento dinámico inicial como 512 MB
  • -Xmx4g: establecerá el tamaño máximo de almacenamiento dinámico como 4 GB

Puede sintonizar -Xms y -Xmx según sus requisitos (YMMV)

Un recurso muy bueno sobre la optimización del rendimiento de JVM, que quizás desee investigar: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html


83
2018-06-18 04:57



Creo que el límite de 2 GB es para Java de 32 bits. Pensé que v1.6 siempre era de 64 bits, pero intente forzar el modo de 64 bits solo para ver: agregue la opción -d64.


14
2018-06-12 22:21



Java de 32 bits está limitado a aproximadamente 1.4 a 1.6 GB.

Preguntas frecuentes sobre Oracle 32 bit heap

Citar

El límite máximo de montón teórico para la JVM de 32 bits es 4G. Debido a varias restricciones adicionales, como el intercambio disponible, el uso del espacio de direcciones del núcleo, la fragmentación de la memoria y la sobrecarga de VM, en la práctica el límite puede ser mucho menor. En la mayoría de los sistemas modernos de Windows de 32 bits, el tamaño máximo del almacenamiento dinámico variará de 1.4G a 1.6G. En kernels de Solaris de 32 bits, el espacio de direcciones está limitado a 2G. En los sistemas operativos de 64 bits que ejecutan la VM de 32 bits, el tamaño máximo de almacenamiento dinámico puede ser mayor, acercándose a 4G en muchos sistemas Solaris.


8
2017-07-22 15:28



Debajo de conf trabaja para mí:

JAVA_HOME=/JDK1.7.51-64/jdk1.7.0_51/
PATH=/JDK1.7.51-64/jdk1.7.0_51/bin:$PATH
export PATH
export JAVA_HOME

JVM_ARGS="-d64 -Xms1024m -Xmx15360m -server"

/JDK1.7.51-64/jdk1.7.0_51/bin/java $JVM_ARGS -jar `dirname $0`/ApacheJMeter.jar "$@"

3
2018-04-21 16:22