Credo che una ragione sia che Java deve fare tutto da solo (un altro aspetto dell'indipendenza dalla piattaforma). Ad esempio, Swing disegna i suoi componenti da zero, non si basa sul sistema operativo per disegnarli. Questo è tutto ciò che deve accadere nella memoria. Un sacco di cose che Windows può fare, ma Linux non fa (o fa diversamente) deve essere completamente contenuto in Java in modo che funzioni allo stesso modo su entrambi.
Java inoltre insiste sempre che la sua intera libreria è "Collegata" e disponibile. Dal momento che non usa DLL (non sarebbero disponibili su ogni piattaforma), tutto deve essere caricato e tracciato da java.
Java fa anche un sacco di virgola mobile poiché le FPU spesso danno risultati diversi che sono stati ritenuti inaccettabili.
Quindi, se si pensa a tutto ciò che C# può delegare all'OS è legato a tutte le cose che Java deve fare per il sistema operativo per compensare gli altri, la differenza dovrebbe essere prevista.
Ho eseguito app java su 2 piattaforme incorporate ora. Uno era un analizzatore di spettro in cui effettivamente ha tracciato le tracce, l'altro è costituito da decoder via cavo.
In entrambi i casi, questo minimo ingombro di memoria non è stato un problema: ci sono stati problemi specifici di Java, che non sono stati uno solo. Il numero di oggetti istanziati e la velocità di verniciatura Swing erano problemi più grandi in questi casi.
fonte
2009-05-16 04:52:32
Come sai che è sovraccarico? Hai fatto un programma scheletro in ognuno di essi e li hai eseguiti? Posso solo fare in modo che JVM impieghi circa 7 mb all'avvio (secondo Task Manager), anche con -Xmx256m -Xms256m. –
Puoi darci una lezione di prova che hai usato in entrambi? Questo aiuterà a riprodurre il problema e quindi dare buone risposte. –
Non penso che la mia domanda fosse chiara, quindi l'ho appena modificata. Per una lezione di prova si è una semplice app HelloWorld. – jshen