jvm系列算法
年老代大部分是活着的對象,那麼年老代過大,或者對象過早提高到年老代,致使年老代存活對象過多,那麼若是作一次FullGC,尋找活着的對象,那麼對於性能可想而知。
若是系統頻繁地發生FullGC的話,而這些或者的對象在這麼短的時間內被註銷的機率很低,那麼FullGC的時間越長,就會有越多的請求得不到響應或者響應很慢,它們所持有的內存就沒法釋放掉,就會有越多的對象進入Old區域,這就會在一個點上產生連鎖效應。
old區不想young區有survivor空間專門存放存活的對象,於是,old區域的對象的清除操做須要在本身的空間內掃描遍歷,而後將對應的垃圾對象清除掉,這個時間開銷天然是比較大的,雖然能夠並行,可是並行之中又帶來了不少衝突的複雜性,於是FullGC一直都不是咱們想看到的。
清除操做會致使內存產生不少碎片,若是碎片不少的話,在大對象分配上面會出現一些麻煩的問題,於是須要整理碎片,若是存活對象過多的話,那麼對於內存碎片整理來講,就越麻煩,有時候可能就爲了幾個字節的碎片而致使幾百M內存對象的移動(JVM不會由於由於這裏有幾個字節的碎片,而尋找一個幾個字節大小的對象放在這個位置,它採用的是順序移動的方式)。