Memoria inactiva vs intercambio

0

Estoy tratando de procesar un gran conjunto de datos en java, y así configuro mi -Xmx11G.

Una de las cosas que observé es que cuando uso xmx y Jvm se inicia, la cantidad de memoria inactiva aumenta aproximadamente esa cantidad. Más tarde, veo que mi archivo de intercambio salta hacia arriba, pero a mi memoria inactiva todavía le quedan 7 gb. ¿Por qué el sistema operativo no utiliza la memoria inactiva, sino que se intercambia en el disco?

    
pregunta goh 28.01.2014 - 14:32

1 respuesta

1

La respuesta general es que el patrón de uso de la memoria de Java difiere de otras aplicaciones, ya que utiliza la recolección de basura en una memoria de tamaño fijo, por lo que obtiene toda la memoria que podría usar por adelantado en lugar de obtenerla cuando sea necesaria.

El inicio es la JVM que asigna la memoria, entonces creo que su recolección de basura tiende a acceder a la memoria a menudo o, de lo contrario, ha asignado el gran conjunto de datos Java y solo accede a una parte. Por lo tanto, se accede al 11G de memoria pero no lo suficiente como para marcarlo como activo. Un programa basado en C no tendrá un hilo de fondo en todas las páginas de la memoria, por lo que las páginas pueden estar inactivas el tiempo suficiente para ser intercambiadas.

Por experiencia, aunque en otros sistemas operativos, Java realmente se ralentiza si se intercambia alguna de su memoria y ajusta el tamaño de su VM para que no lo haga. Si necesita más memoria, obtenga más RAM o modifique el algoritmo para usar menos.

    
respondido por el Mark 28.01.2014 - 16:42

Lea otras preguntas en las etiquetas