Tengo curiosidad por saber cuál es el significado exacto de la memoria "comprometida" cuando se consulta el valor desde la clase MemoryUsage. Esa clase lo explica como "comprometido representa la cantidad de memoria (en bytes) que está garantizada para estar disponible para el uso de la máquina virtual Java". ¿Esto significa que la memoria está en uso por el proceso de jvm y NO está disponible para otros procesos hasta que sea liberada por el proceso de java, o significa que el proceso de java será exitoso si intenta asignar hasta esa cantidad de memoria ? Me doy cuenta de que esto podría ser específico de la implementación, pero solo me interesa el punto de acceso.Estado exacto de la memoria confirmada en java
Respuesta
El tamaño comprometido es la memoria realmente asignada, el tamaño utilizado es el tamaño utilizado para almacenar datos reales (cuando se usa ~ = comprometido es el momento para GC mayor y posiblemente para aumentar el montón). El tamaño Máx. Es el límite estricto al que puede crecer el montón: si no es suficiente, la JVM arroja OutOfMemoryError.
Si se comete una memoria, definitivamente se puede usar. Además, la única ocasión en que JVM no podría comprometer más memoria (en un sistema operativo moderno) es si el hardware está fuera de la memoria virtual.
Todos estos tamaños solo indican el tamaño de la región de montón. La JVM también tiene otras regiones de memoria (pilas de hilo, caché JIT, etc.) La región de montón es generalmente más grande, esto corresponde aproximadamente a la huella del proceso.
dos notas:
- si el tamaño comprometida no cabe en la memoria física, partes de ella se intercambiarán en el fichero de página. Esto conduce a una gran desaceleración durante el GC y, en tales casos, mejorará el rendimiento de la aplicación al reducir el tamaño del montón.
- algunos sistemas operativos permiten doble reserva de la memoria - se puede asignar tanto como usted desee, siempre y cuando no se intenta utilizarlo (olvidó qué sistema operativo que era - alguien me llenará)
"Esto significa que la memoria está en uso por el proceso de jvm y NO está disponible para otros procesos" sería la correcta. Por lo tanto, es menor (o igual a) la cantidad de memoria que el sistema operativo ve como tomada por el proceso de JVM.
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html (lo siento, no hay anclas para vincular).
- 1. ¿Cómo determinar el estado exacto de un BufferedReader?
- 2. ¿Oracle permite la opción de lectura no confirmada?
- 3. Causa de la "respuesta ya confirmada" del servlet
- 4. Java: ByteArrayOutputStream eficiente en memoria
- 5. C# buscar partido exacto en la cadena
- 6. Java JDBC estado de la conexión
- 7. memoria eficientes en Java
- 8. Uso exacto de la clase abstracta
- 9. compilación en memoria de Java
- 10. ¿Qué aspecto tiene Java en la memoria?
- 11. ¿Cómo encontrar la fuga de memoria en Java con JProfiler?
- 12. Modelo de memoria Java
- 13. Archivos mapeados en memoria en Java
- 14. administración de memoria java
- 15. Eliminar la memoria de la variable no utilizada en java
- 16. Java - ¿La variable de nula requiere espacio en la memoria
- 17. Explicación de la memoria Java (SUN JVM)
- 18. Uso de la memoria Java BigDecimal?
- 19. Java utilizando más memoria que la memoria asignada
- 20. Implementación de la compresión en memoria para objetos en Java
- 21. Java en la estructura de archivos en memoria?
- 22. Uso de la memoria de la aplicación Java
- 23. Notificación de falta de memoria en Java
- 24. Fugas de memoria en la API estándar de Java
- 25. En la gestión de memoria de Java, ¿qué significa 'PS'?
- 26. Java Time Zone está en mal estado
- 27. ¿Cuál es el uso exacto de las clases en el paquete java.util.concurrent.atomic en Java?
- 28. java to rails - estado allí?
- 29. Cualquier concepto de memoria compartida en Java
- 30. Java - apagar el error de memoria
Al menos Linux puede hacer esta doble reserva; se llama "exceso de compromiso". http://opsmonkey.blogspot.com/2007/01/linux-memory-overcommit.html – sleske
"El tamaño comprometido es la memoria realmente asignada, el tamaño utilizado es el utilizado para almacenar datos reales (cuando se usa ~ = se ha comprometido a que sea el GC principal y, posiblemente, que aumente el montón). El tamaño máximo es el límite al que puede crecer el montón: si no es suficiente, la JVM arroja OutOfMemoryError ". para mí esto significa que alguna vez (se depende del valor máximo de heap, -Xmx) obtendrá OutOfMemoryError? –