Qualcuno può spiegarmi perché le JVM (non ne ho controllate troppe, ma non ne ho mai viste una che non l'abbiano fatto in quel modo) devono essere eseguite su una dimensione di heap fissa? So che è più semplice da implementare su un semplice heap contiguo, ma Sun JVM ha ormai più di dieci anni, quindi mi sarei aspettato che avessero 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 da fare, e poi ci sono le cattive interazioni con la gestione della memoria virtuale dell'OS (GC che recupera i dati scambiati, incapacità di determinare la quantità di memoria Il processo Java è veramente che utilizza dal lato del sistema operativo, enormi quantità di spazio su 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 applicativi EE, OSGi) siano almeno in parte responsabili di questa circostanza, perché l'esecuzione di più processi Java su un sistema porta inevitabilmente a risorse sprecate perché devi dai a ciascuno di loro la memoria che potrebbe dover usare al massimo.
Sorprendentemente, Google non ha suscitato le tempeste di indignazione per questo che mi sarei aspettato, ma potrebbero essere stati seppelliti sotto milioni di persone che hanno scoperto la dimensione dell'heap e l'hanno semplicemente accettata per un fatto.