Ho notato che l'applicazione Spring Boot non obbedisce alla quantità di memoria impostata tramite l'opzione Xmx. Per esempio: java-jar -Xss64m -Xmx64m test.jarIl consumo di memoria di avvio a molla aumenta oltre l'opzione -Xmx
Ho anche stampato sulla console la quantità di memoria realmente utilizzato dall'applicazione all'avvio, e mostra: massima di memoria: 61M
long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes/1024/1024 + "M");
Quando Apro i processi di Windows prima di accedere a qualsiasi pagina web, mostra + -105M, quindi come può dire Java 61M?
Dopo l'accesso a qualsiasi pagina Web va da + -125M a + -135M. Perché c'è un tale aumento? Dovrebbe dare "java.lang.OutOfMemoryError: PermGen space" ma non aumentare in questo modo.
Mi fa preoccupare se molte applicazioni potrebbero esaurire la memoria sul server. A proposito, sto usando Java 1.8_45
Si consiglia di leggere sul modello di memoria java, in particolare sulle modifiche in JRE 8. Xmx specifica la dimensione dell'heap, non PermGen. Con Java 8, PermGen aumenta dinamicamente, se necessario. Inoltre, la memoria, che il programma effettivamente utilizza e la memoria che è bloccata dal sistema operativo, può essere diversa. – dunni
Ok, ma PermGen va oltre Xmx così? Non riesco a impostare PermGen max in JVM 8 –
Come ho detto, con Xmx si imposta la dimensione massima per lo spazio heap, che è completamente indipendente dallo spazio permgen. Con Java 8, il permgen è stato effettivamente rimosso e sostituito da MetaSpace, che alloca lo spazio necessario direttamente dalla memoria nativa. Tuttavia, esiste un'opzione, in cui è possibile impostare la dimensione massima per il MetaSpace. Vedere questo articolo per maggiori informazioni: http://java.dzone.com/articles/java-8-permgen-metaspace – dunni