2010-01-15 15 views
10

Ho un'applicazione java per la ricerca di file e di solito raggiunge il limite di heap predefinito molto presto. Non ho accesso a tutti i sistemi su cui verrà installato, quindi voglio aumentare la dimensione dell'heap JVM nell'applicazione stessa. Qualcuno mi può aiutare come posso farlo a livello di codice nella mia applicazioneCome aumentare la dimensione dell'heap java a livello di programmazione

+2

Perché non si sceglie di aggiungere uno script di avvio (bat o sh) con parametri iniziali definiti per jvm (come Xmx) e distribuirlo insieme all'applicazione stessa. –

+3

Quale sarebbe il punto di fissare un limite se qualche app potesse semplicemente aumentarlo a piacimento? –

+0

non è possibile modificare a livello di codice i vincoli di memoria in un'applicazione in esecuzione –

risposta

4

Non esiste un'API standard per farlo.

Si consiglia di utilizzare Java Web Start per richiamare l'applicazione (può essere utilizzata per le applicazioni locali nell'ultimo Sun Java 6) in quanto consente di specificare i valori per questo.

È quindi possibile avere tre o quattro collegamenti ciascuno che puntano esattamente agli stessi file ma con dimensioni heap "Tiny", "Medium", "Large", "Gigantic".

2

Dai uno sguardo a qualcosa come launch4j e considera la distribuzione di file eseguibili in cui puoi controllare il limite quando qualcuno avvia l'esecuzione della tua applicazione.

Non sarà possibile farlo a livello di programmazione.

2

Per le applicazioni desktop, suggerisco di fornire un programma di avvio che possa specificare la dimensione della memoria desiderata. Oltre alla configurazione della JVM, è anche possibile fornire un'icona, associazioni di file, ecc.

Vedere questo SO question per alternative di implementazione.

6

L'impostazione -Xmx a un concerto non significa che JVM allocherà quella quantità di memoria all'avvio. La JVM allocherà solo -Xms (più overhead) finché non sarà necessario più spazio su heap. Avete bisogno di proteggere i vostri utenti dalla memoria virtuale che si agita o da un'allocazione di memoria fallita dal sistema operativo? In caso contrario, imposta Xmx su un valore elevato. Nota che le JVM a 32 bit di Windows ignorano spesso le impostazioni Xmx superiori a 1.2Gig, quindi è meglio non richiedere più di un concerto per sicurezza.

+1

Le JVM a 32 bit non ignorano le dimensioni massime dell'heap massimo, ma non si avviano. Basta impostare -mx1200m o simile. (-mx funziona altrettanto bene di -Xmx) –

Problemi correlati