2010-03-10 5 views

Répondre

4

Cela dépend de l'implémentation de la machine virtuelle Java et n'est pas spécifié dans la spécification.

La JVM Sun le conservera dans un premier temps. Une fois qu'un certain pourcentage (configurable) de la mémoire allouée est inutilisé, il en renverra une partie au système d'exploitation (le comportement est influencé par le MinHeapFreeRatio and MaxHeapFreeRatio settings).

+0

Je n'ai jamais vu la Java VM agir de façon très agressive pour retourner de la mémoire au système - probablement une bonne chose par défaut. Les processus Java ont tendance à être longs et en constante expansion et les contrats peuvent fragmenter la mémoire. Pour la plupart des solutions côté serveur, libérer de la mémoire conduirait à un comportement non-déterministe et à des performances médiocres, mais ce serait bien s'ils laissaient cette décision aux utilisateurs (avec les paramètres -Xmx/-Xms). –

1

Retour au processus d'abord, mais pourrait également revenir à l'OS à la fin. La mémoire allouée par le GC est dans un gros morceau contigu (le tas) ou un ensemble de morceaux, et GC "libérant" libère simplement l'allocation dans le tas, mais pas nécessairement de nouveau au système d'exploitation. Une fois que le GC se compacte, il peut être possible pour la machine virtuelle de renvoyer de la mémoire au système d'exploitation. Le CPG souhaite conserver une certaine quantité d'espace afin de pouvoir répondre rapidement aux futures «nouvelles» demandes de mémoire. Donc, GC fait des demandes à l'OS pour la mémoire dans de grands segments, aussi rarement que possible.

Questions connexes