En mi aplicación, ejecuto algunos subprocesos con código que no es de confianza y, por lo tanto, debo evitar un desbordamiento de memoria. Tengo un WatchDog que analiza el tiempo del hilo actual (los hilos fueron llamados en serie). Pero, ¿cómo puedo determinar el uso de la memoria? Solo conozco el uso de memoria de toda la máquina virtual con Runtime.totalMemory()
? Si existe la posibilidad de descubrir el uso del hilo, o el uso del único proceso, sería genial. Con el uso de memoria del proceso, podría calcular el uso del hilo de todos modos.Uso de memoria de subproceso o proceso en Java
Respuesta
Dado que una JVM que ejecuta un programa Java es un proceso Java, no tiene que preocuparse por eso. Todos los subprocesos comparten el mismo espacio de memoria en el proceso de JVM.
por lo tanto es suficiente confiar en
Lo que hay que hacer es ejecutar el código no confiable en su propio proceso/JVM. Esto es posible utilizando las interfaces JNI (si su sistema operativo lo permite).
Una aplicación Java no puede controlar la cantidad de memoria (o CPU) utilizada por sus subprocesos, , independientemente de si los subprocesos ejecutan código de confianza o no de confianza. No hay API para hacer esto en las JVM de generación actual. Y ciertamente no hay API para monitorear el uso de la memoria de un hilo. (Ni siquiera está claro si este es un concepto significativo ...)
La única forma de garantizar el uso de recursos del código Java que no es de confianza es ejecutar el código en una JVM separada y usar el nivel del sistema operativo controles de recursos (como ulimit, nice, sigstop, etc.) y "-Xmx" para limitar el uso de recursos de la JVM.
Hace algún tiempo, un Sol produce JSR 121 destinada a abordar este problema. Este JSR permitiría que una aplicación se divida en partes (llamadas "aislamientos") que se comunicaron a través del envío de mensajes, y ofreció la posibilidad de que un aislado supervise y controle a otro. Desafortunadamente, las API Isolate aún no se han implementado en ninguna JVM principal.
- 1. ¿Tiene un subproceso de Java su propia identificación de proceso?
- 2. ¿Uso de memoria de un proceso hijo?
- 3. Comprobar el uso de memoria del subproceso en Python
- 4. ¿Disminuye el uso de CPU/memoria de un subproceso en Java?
- 5. Rieles Creación de nuevo subproceso o proceso en segundo plano
- 6. Limitar la memoria de proceso/uso de CPU en Linux
- 7. Uso de memoria del proceso actual en C
- 8. Encontrar el uso de la memoria en Java
- 9. uso de CPU de subproceso múltiple en C#
- 10. ¿Cómo optimizar el uso de la memoria del proceso php?
- 11. Diferencia de uso de memoria Java entre Linux y Windows
- 12. Quantum de tiempo por proceso por subproceso
- 13. Java - ¿Cómo puedo monitorear el uso de memoria y CPU de otro proceso?
- 14. Supervisar el uso de la memoria del proceso secundario
- 15. Implementar correctamente el proceso de fondo Subproceso en ASP.NET
- 16. Uso de la memoria Java BigDecimal?
- 17. bloqueo de subproceso Java
- 18. Trabajador Subproceso en Java
- 19. Monitoreo del uso de memoria propia mediante la aplicación Java
- 20. ¿Qué es un subproceso process_reaper en Java?
- 21. Uso de memoria virtual de Java en Linux, demasiada memoria utilizada
- 22. Obtenga ID único de trabajador/subproceso/proceso/solicitud en PHP
- 23. Memoria de proceso Vs Heap - JVM
- 24. OutOfMemoryError en un subproceso Java separado
- 25. Serializable, clonable y uso de memoria en Java
- 26. ¿Cómo reviso el uso de CPU y memoria en Java?
- 27. Limitar el uso de memoria y CPU de aplicación Java
- 28. Uso de memoria del Playframework
- 29. compilación en memoria de Java
- 30. Java: seguro de subproceso RandomAccessFile
Por definición, un subproceso comparte el mismo espacio de memoria que los otros subprocesos en el proceso. Tu pregunta no tiene mucho sentido. JVM = proceso. 1 proceso tiene muchos hilos. –
JVM = proceso, eso significa que cada proceso de Java tiene una propia JVM? – Nicolas
Sí. Cuando inicias java, comienzas una nueva JVM. –