Kann mir jemand erklären, warum JVMs (ich habe nicht zu viele geprüft, aber ich habe noch nie eine gesehen, die das nicht so gemacht hat) auf einer festen Heap-Größe ausgeführt werden müssen? Ich weiß, dass die Implementierung auf einem einfachen zusammenhängenden Heap einfacher ist, aber die Sun-JVM ist inzwischen über ein Jahrzehnt alt, und ich würde davon ausgehen, dass sie Zeit hatten, dies zu verbessern.
Die Notwendigkeit, die maximale Speichergröße Ihres Programms zum Startzeitpunkt zu definieren, scheint in den 1960er Jahren ein Problem zu sein, und dann gibt es die schlechten Wechselwirkungen mit der virtuellen Speicherverwaltung des Betriebssystems (GC-Abruf von ausgelagerten Daten, Unfähigkeit zu bestimmen, wie viel Speicher der Java-Prozess ist) wirklich mit von der OS - Seite, verschwendet große Mengen an VM Raum (ich weiß, kümmert es dich nicht auf deine Phantasie 48bit Maschinen ...)). Ich vermute auch, dass die verschiedenen traurigen Versuche, kleine Betriebssysteme innerhalb der JVM (EE Application Server, OSGi) zu erstellen, zumindest teilweise auf diesen Umstand zurückzuführen sind, da das Ausführen mehrerer Java-Prozesse auf einem System ausnahmslos zu Ressourcenverschwendung führt, da dies erforderlich ist Geben Sie jedem Speicher den Speicher an, den er zu Spitzenzeiten verwenden muss.
Überraschenderweise hat Google darüber nicht die erwarteten Empörungsstürme ausgelöst, aber sie wurden möglicherweise unter den Millionen von Menschen begraben, die sich über eine feste Haufengröße informierten und diese Tatsache einfach akzeptierten.