Votre vieille configuration Java ne démarre plus en Java 17 ? La réponse est dans la mémoire de la JVM.
En Java, chaque thread a sa stack, pour ses variables locales. Les objets vivent dans le heap, la zone que le garbage collector nettoie. Les classes sont décrites dans le Metaspace, hors du heap. Et la JVM utilise encore d’autres zones de mémoire, qu’on oublie souvent.
Trois zones à connaître La mémoire d'un processus Java : les stacks des threads, le heap, le Metaspace et les autres zones natives Processus Java tout ce qui est hors du heap est de la mémoire native Stacks une par thread · -Xss Thread main traiter() · client main() Thread 2 lire() run() frames, variables locales Heap partagé · géré par le GC · -Xmx Client String List byte[] les objets créés avec new les chaînes internées les champs statiques des classes Metaspace mémoire native sans limite par défaut Client champs, méthodes… String champs, méthodes… la description des classes -XX:MaxMetaspaceSize Et aussi, en mémoire native Code cache le code compilé par le JIT 240 Mo au maximum par défaut Direct memory ByteBuffer.allocateDirect() -XX:MaxDirectMemorySize Structures internes du garbage collector, du compilateur… La stack : une par thread Chaque thread a sa propre stack. À chaque appel de méthode, la JVM y ajoute une frame : les paramètres et les variables locales de la méthode. Quand la méthode se termine, sa frame disparaît. Pas besoin du garbage collector pour libérer cette mémoire.
...