2012-08-24 14 views
8

Mi pregunta es como el título, y me dio un poco de conocimiento mediante la búsqueda:¿Por qué la JVM consume menos memoria que -Xs especificados?

  1. Linux ha compartido memoria How to measure actual memory usage of an application or process?

  2. JVM se reservará la cantidad de memoria enchufar en Xms What does the -Xms JVM mean in reference to heap memory?

Pero todavía no sé por qué, algunos pueden ofrecer ayuda?

Aquí está mi ejecución de prueba en Ubuntu12.04 (64 bits) | JDK 1.7.0_04. y la parte superior se muestra a continuación:

PID USER  PR NI VIRT RES  SHR S %CPU %MEM TIME+ COMMAND 
4067 brian  20 0 5316m **262m** 7496 S 0 3.3 0:00.30 java -**Xms4096m** -Xmx4096m Test 
4066 brian  20 0 3182m **256m** 7496 S 0 3.3 0:00.30 java -**Xms2048m** -Xmx2048m Test 
4065 brian  20 0 2114m **252m** 7492 S 0 3.2 0:00.30 java -**Xms1024m** -Xmx1024m Test 
4064 brian  20 0 1314m **76m** 7584 S 0 1.0 0:00.20 java -**Xms256m** -Xmx256m Test 
4063 brian  20 0 1180m **51m** 7608 S 0 0.7 0:00.21 java -**Xms128m** -Xmx128m Test 

Respuesta

5

Se encuentra en la residente en memoria - es decir, la memoria RAM física consume. Vea here para más información.

La memoria virtual, sin embargo, es la memoria consumida por su aplicación, incluida la memoria intercambiada (en el disco). Verás que hay una correspondencia más cercana con la memoria virtual y tus configuraciones -Xms.

Consulte this ServerFault answer para obtener más información.

+0

a punto de preguntar "¿Por qué se usa swap aunque mi memoria sea abundante?". y obtuve la respuesta de la url que adjuntó ... ¡gracias! –

+0

¿Cuándo crecerá la memoria RES xms? Tengo un progreso que xms y xmx = 6g, y después de arrancar, RES es 4g, después de un día, es de 5,9 g, pero cuando vuelco el montón, solo es de 3,9 g. Entonces, ¿continuaré consumiendo memoria jvm hasta xms cuando lo necesite aunque los objetos usados ​​en memoria no necesiten tanto? – Jaskey

3

Cuando se inicia su JVM, se reserva el tamaño máximo de almacenamiento dinámico como un bloque continuo de memoria virtual al inicio. Sin embargo, solo las páginas realmente utilizadas se convierten en páginas residentes (memoria principal real)

Cuando establece el tamaño mínimo, no obliga a la JVM a utilizar esa cantidad de memoria si no la necesita. En su lugar, se requiere poco esfuerzo para reducir la memoria hasta este punto (es posible que todavía vea algunas colecciones menores). En la mayoría de las aplicaciones, el tamaño mínimo se alcanza casi de inmediato, pero un programa "hello world" usará la misma memoria, independientemente del tamaño que establezca el tamaño mínimo para ser.

+0

, ¿te refieres a que, si configuro xms = xmx = 6g, la mayoría de las veces no se desencadena el gc, incluso si tengo solo 4g de objetos alcanzables? – Jaskey

Cuestiones relacionadas