Domanda

Ho un piuttosto avido di memoria applicazione java. Sui miei sistemi a 32 bit con Windows XP Professional l'applicazione sarà solo funzionare bene se lo do -Xmx1280m. Tutto sotto finirà in un'eccezione java.lang.OutOfMemoryError: Java heap space.

Se faccio funzionare la stessa applicazione su un computer Windows XP Professional (tutto il resto esattamente lo stesso) a 64 bit richiede -Xms1400m per evitare che la condizione OutOfMemory.

Per la mia comprensione, se ho un programma in C e ho compilarlo per 32 bit e 64 bit per il versione a 64 bit sarà bisogno di più memoria perché i puntatori sono più larghi e così via. Nel mio esempio java tuttavia la macchina virtuale (Sole) è lo stesso e il bytecode è lo stesso.

Perché ha bisogno più memoria sulla macchina a 64 bit?

È stato utile?

Soluzione

Probabilmente perché il macchina virtuale attuazione differisce tra architettura 32/64 bit in modo tale che consuma più memoria (più larghi, differente GC).

Il codice byte è irrilevante quando passa sui compiti al sistema sottostante. Non sono sicuro che Java e la memoria-efficiente sono due termini avrei messo insieme comunque: P

Altri suggerimenti

Anche se il bytecode è lo stesso, la JVM converte che in codice macchina, quindi ha tutte le stesse ragioni di C per richiedere una memoria più grande impronta.

E 'la stessa ragione per cui già elencati per il programma C. Il sistema a 64 bit utilizza grandi indirizzi di memoria, inducendolo a essere "leakier" (credo che sia il termine che ho sentito usato per descriverlo).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top