Ci sono molti post e siti sulla dimensione dell'heap, ma nessuno di essi menziona come scoprire la dimensione massima possibile dell'heap che posso riservare quando si richiama jvm.Java heap JVM massimo prenotabile in anticipo
L'attività è di avviare dinamicamente il mio jvm con la dimensione massima disponibile dell'heap xmx = max (non c'è bisogno di discutere sull'oggetto di questa attività qui!).
Si potrebbe pensare di leggere la memoria disponibile o disponibile corrente e utilizzare quella dimensione per xms e xmx. Ma questo non funziona.
ad esempio su un computer a 64 bit e sistema operativo Windows, con 24 GB di RAM, circa 1,8 GB su memoria virtuale disponibile: (Quelli sono state determinate da C#, che sta eseguendo il comando Java in un processo)
la JVM è lanciato con 32 bit! E secondo altri siti e messaggi come: Maximum Java heap size of a 32-bit JVM on a 64-bit OS dovrebbe variare sopra 1,4 GB.
[09.07.2015 08:39:39] Total physical memory MB: 24002
[09.07.2015 08:39:39] Available physical memory MB: 16115
[09.07.2015 08:39:39] Total virtual memory MB: 2047
[09.07.2015 08:39:39] Available virtual memory MB: 1810
chiamare un programma Java con:
java -Xms1536m -Xmx1536m myApp
portano a:
Could not reserve enough space for 1572864KB object heap
lo stesso vale tutta la strada fino a 1136m, che è il massimo possibile!
Per quanto riguarda la mia domanda: come verificare in anticipo la dimensione heap possibile per chiamare il jvm, senza errore di prova?
UDPATE: Sulla base di questi commenti, sollevo un'altra domanda per tutti quelli che Pro è là fuori: Come gestite la vostra applicazione Java?
- Scegli l'heap che hai controllato l'app Ha bisogno di ca. e lasciare che l'utente muoia in un errore se quell'heap non è possibile
- Errore di prova: abbassare l'heap e rieseguire l'app fino a trovare un heap valido valido
- Utilizzare questo metodo segreto per determinare la dimensione massima dell'heap e eseguirlo senza intoppi (Se è così, per favore inserire la cerchia di fiducia :))
Sono assolutamente curioso delle vostre risposte!
'solo 1136m è possibile!' Stai usando un JRE a 32 bit? –
@FranMontero scusa se l'ho dimenticato, guarda la risposta aggiornata – gantners
In realtà ho postato una domanda simile qualche settimana fa XD http: // StackOverflow.it/questions/31533378/failed-to-run-java-with-xmx-966m/31534282 # comment51067983_31534282 –