Qualcuno può spiegarmi perché i JVM (non ne ho controllati troppi, ma non ne ho mai visto uno che non lo ha fatto in quel modo) devono essere eseguiti su una dimensione heap fissa? So che è più semplice implementarlo su un semplice heap contiguo, ma Sun JVM ha ormai più di un decennio, quindi mi aspetto che abbiano avuto il tempo di migliorarlo.
La necessità di definire la dimensione massima della memoria del programma al momento dell'avvio sembra una cosa del 1960, quindi ci sono le cattive interazioni con la gestione della memoria virtuale del sistema operativo (GC che recupera i dati scambiati, incapacità di determinare quanta memoria è il processo Java usando davvero dal lato del sistema operativo, enormi quantità di spazio VM sprecato (lo so, non ti importa delle tue fantasiose macchine a 48 bit ...)). Immagino anche che i vari tristi tentativi di costruire piccoli sistemi operativi all'interno della JVM (server di applicazioni EE, OSGi) siano almeno in parte responsabili di questa circostanza, perché l'esecuzione di più processi Java su un sistema porta invariabilmente a sprecare risorse perché è necessario dare a ciascuno di loro la memoria che potrebbe essere necessario utilizzare al massimo.
Sorprendentemente, Google non ha prodotto le tempeste di indignazione per ciò che mi sarei aspettato, ma potrebbero essere state seppellite da milioni di persone che hanno scoperto le dimensioni dell'heap fisso e accettandolo per un dato di fatto.