2011-03-03 23 views
5

stiamo sviluppando un'applicazione altalena scritto da Java, che richiede solo circa 128 MB di memoria, e nel breve futuro, non vedo che richiederà molto più memoria come 4GB. In precedenza forniamo sempre 3 versioni diverse, una per Windows a 32 bit, una per Linux a 32 bit e un'altra per Linux a 64 bit, con un programma di installazione che include JRE. La versione a 64 bit non è stato utilizzato da nessuno fino paio di settimane fa, e di un OutOfMemoryException è stato segnalato perché l'applicazione consuma circa il 40-50% in più di memoria rispetto alla versione a 32 bit.Applicazione a 32 o 64 bit su sistema operativo a 64 bit?

La mia domanda è, è necessario a tutti per noi di fornire la versione a 64-bit per Linux a 64 bit se l'applicazione non avrà mai bisogno di utilizzare più di 4GB di memoria? Abbiamo fatto un rapido test che ha rivelato che la versione a 32 bit funziona anche su Linux a 64 bit. Ma non sono sicuro di quali potrebbero essere gli svantaggi che avremmo, ad es. problema di prestazioni e/o compatibilità?

+0

Vorrei chiarire un po ': la versione a 32 bit è utilizzare 128 MB come memoria massima, per la versione a 64 bit, può richiedere 192MB, in modo che non solo abbiamo per creare installer a 64 bit supplementari, ma dobbiamo anche creare configurazioni diverse, il che rende il tutto più complicato. E se usiamo 192 MB per tutte le versioni, allora potrebbe rendere le perdite di memoria non così visibili per noi perché la versione a 32 bit è più frequentemente usata ormai. Un'altra cosa è che molte applicazioni potrebbero essere eseguite su quel server, quindi vorremmo ridurre il consumo di memoria il più basso possibile. –

+0

Non richiederà più memoria se si utilizzano riferimenti a 32 bit in una JVM a 64 bit. –

risposta

3

Se l'applicazione non fornisce miglioramenti per sistemi operativi host a 64-bit ed è compatibile con le versioni a 32-bit, allora non vedo la necessità immediata di fornirle.

Tuttavia, la maggior parte, se non tutte nuovo sistema sono basati su architettura x64 in cui sostengo che anche il software a 64 bit dovrebbe essere il default naturale. Questa esigenza aumenta man mano che si avvicina il livello hardware. Non posso dirti quanto sia awkard eseguire un funzionamento virtuale solo per supportare alcuni client VPN a 32 bit.

Promuovere il client a 64 bit probabilmente un impatto tue statistiche di download se si decide di fare la scelta preferita.

2

La maggior parte delle JVM a 32-bit sono limitati a circa 1.2-1.5 GB.

Se l'applicazione utilizza molta più memoria con JVM a 64 bit, provare lo -XX:+UseCompressedOops che indica alla JVM a 64 bit di utilizzare riferimenti a 32 bit ma può comunque accedere a 32 GB di memoria.

1

La mia domanda è, è necessario a tutti noi per fornire la versione a 64 bit per Linux a 64 bit se l'applicazione non avrà mai bisogno di utilizzare più di 4 GB di memoria?

Se l'applicazione non sarà mai bisogno di tanto la memoria, po 'installatore 64/JVM non aggiunge alcun valore. Al contrario, è un'opzione scadente perché (come avete osservato) utilizza semplicemente più memoria e (probabilmente) gira più lentamente di conseguenza.

(In realtà, il limite effettivo sarà inferiore a 4 GB. Alcune parti del spazio di indirizzamento a 32 bit saranno inutilizzabili, a causa di problemi di architettura hardware.)

ti suggerisco di ritirare la versione a 64 bit, ma fornire all'utente la possibilità di utilizzare una JVM che ha scaricato e installato separatamente. (In effetti, probabilmente si dovrebbe fare quest'ultima in ogni caso copie embedded di JRE tendono ad avere trascurato quando la gente l'aggiornamento per ottenere gli ultimi aggiornamenti di sicurezza JVM ....)