Czy ktoś może mi wyjaśnić, dlaczego maszyny JVM (nie sprawdziłem ich zbyt wiele, ale nigdy nie widziałem takiego, który nie zrobiłby tego w ten sposób) muszą działać na stałym rozmiarze sterty? Wiem, że łatwiej jest wdrożyć na prostej, ciągłej sterty, ale Sun JVM ma już ponad dekadę, więc spodziewam się, że mieli czas, aby to poprawić.
Konieczność zdefiniowania maksymalnego rozmiaru pamięci programu podczas uruchamiania wydaje się być czymś w stylu lat 60., a potem są złe interakcje z zarządzaniem pamięcią wirtualną systemu operacyjnego (pobieranie GC zamieniło dane, niemożność ustalenia, ile pamięci jest proces Java naprawdę korzystający ze strony systemu operacyjnego, zmarnowane ogromne ilości miejsca na VM (wiem, że nie obchodzi cię twoje wymyślne 48-bitowe maszyny ...)). Sądzę również, że różne smutne próby budowy małych systemów operacyjnych w JVM (serwery aplikacji EE, OSGi) są przynajmniej częściowo winne za tę okoliczność, ponieważ uruchamianie wielu procesów Java w systemie niezmiennie prowadzi do zmarnowanych zasobów, ponieważ musisz daj każdemu z nich pamięć, której może potrzebować w szczycie.
Co zaskakujące, Google nie wywołało burzy oburzenia z powodu tego, czego się spodziewałem, ale mogły zostać pochowane pod milionami ludzi, którzy dowiadują się o ustalonej wielkości sterty i akceptują to.