Java - o almeno JVM Hotspot di Sun - ha avuto a lungo una reputazione per avere un ingombro di memoria molto grande. Che cosa è esattamente della JVM che dà questa reputazione? Sarei interessato a una suddivisione dettagliata: quanta memoria va al runtime (il JIT? Il GC/gestione della memoria? Il classloader?) Qualsiasi cosa relativa alle API "ausiliarie" come JNI/JVMTI? le librerie standard? (quali parti ottengono quanto?) altri componenti principali?Perché Java ha un ingombro così ampio?
Mi rendo conto che questo può non essere semplice per rispondere senza un'applicazione concreta più la configurazione VM, quindi solo per restringere le cose almeno in qualche modo: sono principalmente interessato alle configurazioni default/tipiche della VM e in una console di base " Hello world "app oltre a qualsiasi app desktop o server del mondo reale. (Sospetto che una parte sostanziale dell'impronta della JVM sia largamente indipendente dall'app stessa, ed è in questa parte che mi piacerebbe ingrandire, idealmente.)
Ho un altro paio di altri domande correlate:
Altre tecnologie simili, come .NET/mono, non presentano quasi lo stesso ingombro. Perché è così?
Ho letto da qualche parte sul intarwebs che una grande parte del footprint è dovuta semplicemente alla dimensione delle librerie standard. Se questo è il caso, allora perché molte delle librerie standard vengono caricate in anticipo?
Ci sono degli sforzi (JSR, qualsiasi cosa) per domare l'impronta della memoria? La cosa più vicina che ho incontrato è un progetto a reduce the on-disk footprint of the JVM.
Sono sicuro che l'impronta è variata negli ultimi dieci anni circa con ogni nuova versione di Java. Ci sono numeri/grafici specifici che descrivono esattamente quanto è cambiata l'impronta della JVM?
Si dovrebbero postare collegamenti ovunque si siano ottenute le informazioni da cui la macchina virtuale HotSpot "... ha da tempo la reputazione di avere un ingombro di memoria molto grande". –
Questa "reputazione" non è altro che un'eredità di Java 1.1 e 1.2 quando Java era giovane. – aberrant80
Non penso che sia del tutto equo - Java non è cresciuto di molto da allora, abbiamo solo un * lotto * in più di RAM con cui giocare. Chiaramente la dimensione del runtime sta danneggiando alcune persone, forse il progetto Jigsaw potrebbe non esistere. –