Pregunta

Podemos usar argumentos JVM para limitar la memoria asignada para el montón JVM, etc.

Me gustaría saber si podemos codificar estos valores dentro del programa Java durante el tiempo de desarrollo, en lugar de agregar argumentos JVM en la línea de comandos cuando ejecutamos el programa. ¿Es posible?

¿Fue útil?

Solución

Mi primera pregunta debería ser, ¿por qué la estás configurando? El servidor JVM establece el máximo en 1/4 del tamaño de memoria principal y esto es razonable para la mayoría de las aplicaciones. Podrías cambiar esto construyendo tu propio JVM o puedes crear un alias como

alias java="java -Xmx30g"

Lo que puede hacer es verificar el uso de la memoria periódicamente y matar el proceso si usa más. Esta es una muy mala idea, por supuesto.

En cambio, lo que puede hacer es ejecutar el programa nuevamente con los mismos argumentos, pero con el tamaño máximo de montón que desea. Es decir, puedes ejecutar tiempo.exec.

No puede cambiarlo, ya que se reserva el tamaño máximo de la memoria al inicio.

Por cierto, hay una idea errónea común de que el montón es la única memoria que importa. Esto no es cierto ya que el JVM, las pilas de subprocesos, la memoria nativa, etc., usan algo de memoria, por lo que puede que el montón sea de 100 MB pero el JVM podría estar usando 300 MB.

Otros consejos

¿Estás tratando de cambiar el tamaño del montón en tiempo de ejecución? No puede hacer esto porque el valor del tamaño del montón debe establecerse cuando JVM comienza y luego no puede cambiar.

No, no puedes hacer esto. Todo lo que puede hacer es agregar argumento a la línea de comandos para administrar el tamaño del montón.

Una solución sucia puede ser generar otro proceso con un tamaño de montón diferente, pero no creo que esto sea lo que está buscando. Aquí Hay un ejemplo.

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