2011-07-12 15 views
12

Diciamo che il denaro non era un fattore limitante e volevo scrivere un programma Java eseguito su una singola macchina potente.Limiti pratici della memoria JVM e dell'utilizzo della CPU?

L'obiettivo sarebbe quello di rendere il programma di Java correre il più velocemente possibile, senza dover scambiare o andare sul disco per qualsiasi cosa.

Supponiamo che il computer ha:

  • 1 TB di RAM (64 16GB DIMM)
  • 64 processor core (8 processori 8-core)
  • esecuzione 64 bit Ubuntu

Potrebbe una singola istanza di un programma java in esecuzione in una JVM sfruttare questa quantità di RAM e processori?

Esistono considerazioni pratiche che potrebbero limitare l'utilizzo e l'efficienza?

  • limitazioni del processo OS (memoria &)?
  • Limitazioni memoria/heap JVM?
  • Limitazioni del thread JVM?

Grazie, Galen

+0

Il mio sospetto è che l'ultimo di server di Sun JVM per Linux sarebbe in grado di sfruttare questa abbastanza bene (purché non c'erano colli di bottiglia a livello di app) - nessuna conoscenza sicuro però. – antlersoft

risposta

8

Una singola istanza può tentare di acces tutta la memoria, tuttavia limitata NUMA significa che cose come GC eseguono male accedere alla memoria in un'altra regione. Questo sta diventando più veloce e JVM ha qualche supporto NUMA, ma deve essere migliorato se si desidera la scalabilità. Anche così puoi ottenere 256 MB di heap e utilizzare 700 di memoria nativa/diretta senza questo problema. ;)

La più grande limitazione se si dispone di un sacco di memoria è che array, raccolte e ByteBuffer (per file mappati in memoria) sono tutti limitati a una dimensione di 2 miliardi. (2^31-1)

È possibile aggirare questi problemi con collezioni personalizzate, ma è veramente qualcosa di Java dovrebbe sostenere IMHO.

BTW: È possibile acquistare un Dell R910 con 1 TB di memoria e 24 core/48 thread con Ubuntu per £ 40K.

BTW: ho solo esperienza di JVM fino a 40 GB di dimensioni.

1

Prima di tutto, il programma Java in sé: un codice mal progettato non avrebbe usato più di tanto del computer-potere. I thread mal implementati, ad esempio, potrebbero rallentare le prestazioni.

Anche il sistema operativo è un fattore limitante: non tutti i SO possono gestire bene quella quantità di memoria.

Penso che la JVM possa gestire quella quantità di memoria, dal momento che il sistema operativo lo supporta.

Problemi correlati