Allocation de mémoire initiale du segment JVM [duplicate]

Dec 07 2020

J'ai spécifié les valeurs -Xms et -Xmx comme étant les mêmes, disons 4 Go. Maintenant, lorsque je lance mon application Spring-Boot, je pensais que le système d'exploitation allouerait 4 Go de mémoire juste après le démarrage de l'application, car c'est la valeur spécifiée à l'aide de l'argument -Xms. Mais lorsque j'ai vérifié l'ensemble résident de l'application et également la mémoire du tas (en utilisant JMX), je peux voir que la mémoire allouée est toujours inférieure à 1 Go. Cela signifie-t-il que le système d'exploitation n'alloue pas nécessairement la mémoire spécifiée à l'aide de -Xms.

Merci d'avance.

Réponses

JurajMartinka Dec 07 2020 at 12:23

Vous n'avez pas dit quel système d'exploitation et quel fournisseur / version de JVM, mais souvent le système d'exploitation alloue les pages paresseusement, c'est-à-dire qu'elles ne sont pas dans la RAM ("résidentes") sauf si nécessaire. Si votre application n'a pas réellement besoin de cette mémoire, elle ne sera pas résidente. Il existe également une "politique de taille adaptative" qui peut réduire le tas même en dessous de "-Xms" si son taux d'occupation est trop faible:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc-ergonomics.html