將新對象預留到新生代
由於Full GC的成本要遠遠高於Minor GC,因此儘可能的將對象分配在新生代是一項明智的選擇。 大部分情況下,jvm會嘗試在eden區域分配對象,但是因爲空間緊張等問題,很可能不得不將部分年輕對象提前向老年代壓縮。因此,可以爲程序分配一個合理的新生代空間,以最大限度避免新對象直接進入老年代的情況。
一般來說,當survivor區的空間不夠,或者佔用量達到50%時,就會將對象進入老年代,不管對象的年齡有多大。解決辦法是可以增大from區或者提高from區的利用率。使用以下參數,均可以將新對象留在新生代
大對象進入老年代
如果需要將1mb以上的對象直接分配到老年代,可以使用如下參數:
-XX:+PrintGCDetails -Xmx20MB -Xms20MB -XX:PretenureThreshold=1000000
設置對象進入老年代的年齡
穩定堆與震盪堆的選擇
關注吞吐量的案例參考
關注降低停頓的案例