Java más lento con gran montón

Tengo un programa Java que opera en un gráfico (grande). Por lo tanto, utiliza una cantidad significativa de espacio de almacenamiento dinámico (~ 50 GB, que es aproximadamente el 25% de la memoria física en la máquina host). En un momento, el programa (repetidamente) selecciona un nodo del gráfico y realiza algunos cálculos con él. Para algunos nodos, este cálculo tarda mucho más de lo previsto (30-60 minutos, en lugar de unos pocos segundos esperados). Con el fin de perfilar estas operaciones para descubrir lo que lleva tanto tiempo, he creado un programa de prueba que crea solo una parte muy pequeña del gráfico grande y luego ejecuta la misma operación en uno de los nodos que tardó mucho en computar en El programa original. Por lo tanto, el programa de prueba obviamente solo usa muy poco espacio de almacenamiento dinámico, en comparación con el programa original.

Resulta que una operación que tomó 48 minutos en el programa original se puede hacer en 9 segundos en el programa de prueba. Esto realmente me confunde. El primer pensamiento podría ser que el programa más grande pasa mucho tiempo en la recolección de basura. Así que activé el modo detallado del recolector de basura de la máquina virtual. Según eso, no se realizan recolecciones de basura completas durante los 48 minutos, y solo alrededor de 20 recolecciones en la generación joven, cada una de las cuales toma menos de 1 segundo.

Entonces, mi pregunta es ¿qué más podría haber que explique una diferencia tan grande en el tiempo? No sé mucho sobre cómo Java organiza internamente el montón. ¿Hay algo que lleve mucho más tiempo para un gran montón con una gran cantidad de objetos vivos? ¿Podría ser que la asignación de objetos lleva mucho más tiempo en tal entorno, porque lleva más tiempo encontrar un lugar adecuado en el montón? ¿O la VM realiza alguna reorganización interna del montón que podría llevar mucho tiempo (además de la recolección de basura, obviamente).

Estoy usando Oracle JDK 1.7, si eso es de alguna importancia.

Respuestas a la pregunta(2)

Su respuesta a la pregunta