Quelqu'un peut-il m'expliquer pourquoi les machines virtuelles Java (je n'en ai pas vérifié trop, mais je n'en ai jamais vu une qui ne l'a pas fait de cette façon) doivent fonctionner sur une taille de segment fixe? Je sais qu'il est plus facile à implémenter sur un simple tas contigu, mais la JVM Sun a maintenant plus de dix ans, alors je m'attendrais à ce qu'ils aient eu le temps d'améliorer cela.
La nécessité de définir la taille maximale de la mémoire de votre programme au démarrage semble une telle chose dans les années 1960, puis il y a les mauvaises interactions avec la gestion de la mémoire virtuelle du système d'exploitation (récupération des données échangées par le GC, incapacité à déterminer la quantité de mémoire du processus Java) en utilisant vraiment du côté du système d'exploitation, d'énormes quantités d'espace virtuel gaspillées (je sais, vous ne vous souciez pas de vos fantastiques machines 48 bits ...)). Je suppose également que les diverses tentatives tristes de construire de petits systèmes d'exploitation à l'intérieur de la JVM (serveurs d'applications EE, OSGi) sont au moins en partie responsables de cette circonstance, car l'exécution de plusieurs processus Java sur un système entraîne invariablement un gaspillage de ressources car vous devez donnez à chacun d'eux la mémoire qu'il pourrait avoir à utiliser au maximum.
Étonnamment, Google n'a pas provoqué les tempêtes d'indignation que j'attendrais à ce sujet, mais ils ont peut-être été enterrés sous les millions de personnes découvrant la taille fixe du tas et l'acceptant juste pour un fait.