Un processo java che sto eseguendo funziona in modo coerente nella prima ora o in modo che funzioni. Tuttavia, le prestazioni si degradano rapidamente. Quando profiling ho scoperto che la raccolta dei rifiuti metaspace accaduto abbastanza spesso fino a quando il segno di un'ora e poi ha ottenuto fuori controllo:Java 8 metaspace garbage collection
Sono abbastanza sicuro che sarò in grado di risolvere questo problema utilizzando il XX: Opzione MaxMetaspaceSize. Tuttavia, mi piacerebbe sapere di più sul perché questo comportamento potrebbe verificarsi. Non riesco a immaginare perché l'algoritmo di garbage collection si comporti in questo modo. Qualcuno ha una spiegazione o un consiglio su una soluzione migliore? Grazie
Penso che tu abbia utilizzato un framework che genera classi in RunTime. E alla fine diventa fuori controllo. La soluzione dipende dal framework che usi. – talex
Grazie, e sì, lo sono. Mi è venuto in mente, ma il ritmo con cui vengono generate le classi non sembra cambiare. Tutto ciò che sembra cambiare è che la frequenza del gc diminuisce. – user1675642
Probabilmente è un'euristica JVM. Cerchiamo di trovare parametri migliori come la dimensione massima. Inoltre è simile all'effetto stroboscopico. Dimensione del metaspazio misurata in un determinato momento. Quando la frequenza di GC è all'incirca uguale alla frequenza di misurazione, possono verificarsi alcuni effetti strani. – talex