¿Hay alguna forma de establecer el tamaño del almacenamiento dinámico desde un programa Java en ejecución?Configuración del tamaño del almacenamiento dinámico de JVM en el tiempo de ejecución
Respuesta
Nº
Lo que puede hacer con una aplicación que tiene unos requisitos muy variables montón es configurar el máximo tamaño de la pila muy alta con -Xmx
y sintonizar -XX:MaxHeapFreeRatio
y -XX:MinHeapFreeRatio
de modo que la aplicación no se aferran a una gran cantidad de memoria cuando el montón se reduce (lo hace con la configuración predeterminada).
Pero tenga en cuenta que esto puede ocasionar problemas de rendimiento cuando la memoria realmente utilizada por la aplicación varía de manera rápida y potente; en ese caso es mejor que se quede con toda la memoria en lugar de devolverla al sistema operativo solo para reclamarlo nuevamente un segundo después. También es posible que desee juguetear con el GC options para asegurarse de que el GC no deje demasiados objetos no reclamados por ahí, lo que suele ocurrir cuando hay mucho espacio para que el montón crezca, y que podría frustrar el objetivo de querer el tamaño del montón para ajustarse a las necesidades de la aplicación.
java -Xmx500m
Sólo al arranque
Según http://www.dreamincode.net/forums/showtopic96263.htm, no se puede hacer esto en tiempo de ejecución, pero se puede generar otro proceso con un tamaño de la pila diferente.
También conocido como un dolor monumental en la parte trasera. Si está utilizando mucha memoria, lo último que desea es liberarlo todo, luego volver a cargarlo en otro proceso. Por supuesto, no puede mantener el proceso anterior abierto el tiempo suficiente para transferir datos ya que está acaparando más memoria con 2 procesos solo para hacer la transferencia. Mejor espero que hayas adivinado bien este tiempo o lo vuelvas a hacer todo de nuevo. – Basic
Puede modificar esas configuraciones cuando inicia su aplicación, pero una vez que la JVM está funcionando, esos valores no pueden modificarse. Algo como esto:
java -Xms32m -Xmx512m FooBar
establecerá el tamaño del montón mínimo 32 MB y el tamaño máximo del montón a 512 MB. Una vez que se establecen, no puede cambiarlos dentro del programa en ejecución.
Si entiendo su pregunta correctamente, está intentando cambiar el tamaño del almacenamiento dinámico en runtime. No veo ninguna razón por la que esto debería ser posible. Establezca el tamaño del almacenamiento dinámico en de inicio utilizando la opción JVM -Xmx
. También le aconsejo que configure la opción -Xms
solo si es absolutamente necesario. Esta opción establece la cantidad inicial de memoria principal que se asigna para la JVM.
Debe saber cómo se comporta su aplicación en términos de memoria. Establezca el valor de -Xmx
sabiamente. Si su aplicación es una especie de aplicación de servidor, puede establecer un valor superior, de lo contrario, puede poner en peligro su elección con otras aplicaciones posibles que se ejecutan en máquinas cliente y, por supuesto, con la memoria disponible.
Establezca el valor sabiamente ... Sí, este es un buen consejo. Pero considere este caso: está observando cómo hace que la aplicación se acerque al máximo del montón, y no puede hacer nada con eso. Sí, hay una fuga en el código ... pero primero debemos mantenernos vivos durante el día y luego solucionaremos el problema –
Tenga en cuenta también que puede tratarse de un applet u otro tipo de aplicación donde no se controla el inicio de la máquina virtual configuraciones. Esos son casos donde esto sería bueno. El problema principal, creo, es que si pudieras cambiar esto, podrías tener problemas de memoria relacionados con la seguridad. –
El consenso puede ser que esto no sea posible, pero deberíamos ver la fuente JVM para ver cómo se puede controlar ergonómicamente. Sería muy agradable poder tener un agente JVMTI capaz de ajustar el tamaño de heap/perm/tenured/new/& c en línea/en tiempo de ejecución.
¿Qué es esto? Permitiría a los agentes inferir ajustes de tamaño basados en los objetivos de rendimiento o huella, que serán importantes al mover las JVM a la nube.
Esto parece una solicitud de función JVM en lugar de una respuesta. . . – ruakh
Me hice la misma pregunta a mí mismo. Y a diferencia de las respuestas anteriores, hay algo que puedo hacer sobre mi aplicación que aumenta el tamaño máximo de JVM del montón. Si la aplicación es un servidor web en modo de clúster, podría iniciar una nueva instancia con el tamaño de almacenamiento mínimo/máximo modificado y la instancia inicial de apagado.Eso será especialmente simple en GlassFish donde tiene una instancia de administración separada de nodeAgent (instancia agrupada del servidor de aplicaciones) JVM.
Dado que muchas aplicaciones de JVM son aplicaciones web, creo que vale la pena conservarlas en este blog.
Puede utilizar la opción -mx en el arranque (también conocido como -Xmx) Este es el tamaño máximo que nunca debería ser necesario en el cual causa que no es necesario establecerlo a más que el tamaño máximo que alguna vez lo necesitará.
Sin embargo, un problema es tener el principal() comprobar el tamaño máximo y reiniciar el Java si el tamaño máximo no es el deseado. es decir, comienza otro programa java y muere.
Esto supone que sabes de antemano cuánta memoria necesitarás. Eso está bien para los servidores web/otras cosas que se transmiten, pero si está analizando datos (por ejemplo, construyendo un índice/buscando tendencias) necesita saber de antemano cuáles serán sus datos, lo cual es bastante limitante – Basic
@Basic Usted no necesita saber cuánta memoria necesitará. El -Xmx es el máximo que puede tener JVM, es decir, el programa debería bloquearse con un OutOfMemoryError en lugar de utilizar más memoria. Este máximo generalmente se basa en la cantidad de memoria que tiene y el valor predeterminado es 1/4 de la memoria principal. La JVM no usará mucha memoria para un programa "hello world" independientemente de lo que establezca el máximo. –
Supongamos que tiene un proceso y le da 50 gigas de memoria de antemano y, durante el aviso de ejecución, se está procesando una gran cantidad de GC, y probablemente 56 GiB sería mejor y no se puede reiniciar fácilmente el programa sin hacer muchos cálculos. – kap
- 1. ¿Aumenta el tamaño del almacenamiento dinámico de JVM para Scala?
- 2. ¿Puede el tamaño de almacenamiento dinámico de JVM ser dinámico?
- 3. Tamaño del almacenamiento JVM en invitados de VMware
- 4. ¿Cómo configurar un gran tamaño de almacenamiento dinámico de JVM?
- 5. Aumento del tamaño máximo de almacenamiento dinámico de JVM para aplicaciones con uso intensivo de memoria
- 6. Configuración del tamaño del almacenamiento dinámico de Java en Apache Karaf
- 7. cómo elegir el tamaño del montón JVM?
- 8. parámetros de almacenamiento dinámico de JVM
- 9. Descripción del tamaño máximo de almacenamiento dinámico de JVM: 32 bits frente a 64 bits
- 10. Aumentar el tamaño del almacenamiento dinámico en Java
- 11. Tomar una instantánea del tiempo de ejecución optimizado de JVM
- 12. C# Tamaño del código y tiempo de ejecución del código
- 13. Cómo aumentar el tamaño del almacenamiento dinámico de Java de forma programática
- 14. Calcular el tamaño de almacenamiento dinámico de jvm para alojar la aplicación web
- 15. Ejecución del código nativo por JVM/CLR
- 16. Error al iniciar Glassfish después de aumentar el tamaño del almacenamiento dinámico
- 17. Aumente el tamaño del almacenamiento dinámico en el plugin m2e Eclipse
- 18. Configuración del atributo href en tiempo de ejecución
- 19. ¿Cómo puedo determinar el tamaño mínimo de almacenamiento dinámico de JVM desde una aplicación java?
- 20. cómo obtener la configuración de tamaño mínimo y máximo de almacenamiento dinámico de una JVM desde un programa Java
- 21. ¿Agregando dinámicamente la configuración del contexto del resorte en el tiempo de ejecución?
- 22. Encontrar el tamaño de almacenamiento dinámico actual con jmap
- 23. Leer el espacio máximo de almacenamiento dinámico en tiempo de ejecución
- 24. Configuración del nivel de registro del mensaje en tiempo de ejecución en slf4j
- 25. Tiempo de ejecución del programa
- 26. Determinación de la ubicación del ejecutable de JVM durante el tiempo de ejecución
- 27. Lenguaje basado en JVM sin tiempo de ejecución de idioma
- 28. ¿Cómo cambias el tamaño de Fancybox en tiempo de ejecución?
- 29. Configuración del tiempo de espera del zócalo?
- 30. Limitaciones inusuales de tamaño de almacenamiento dinámico en VS2003 C++
Como referencia, aquí está el RFE para el punto de acceso: bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408373 –