JVM掃盲(六)

from: JVM中的術語解釋:吞吐(throughput)和暫停時間(pause time)segmentfault

JVM GC中的吞吐和暫停術語緩存

在JVM中, 'stop-the-world'很誇張的一個詞, 可是在GC的時候,大量的工做和研究只爲減小'stop-the-world'的影響。安全

最近在JVM學習中, 有幾個GC收集器已經被設計成應用中具備較好性能的工具。而且還有2種方式能夠證實是否屬於優秀的GC。2種方式以下: 工具

1. 具備良好吞吐。性能

2. 具備較短暫的暫停時間。學習

3. 先解釋下 什麼是吞吐, 什麼是暫停時間線程

吞吐:意味着應用線程運行的時間佔全部線程運行時間的百分比 -> Throughout = 應用線程運行時間 / 全部線程運行總時間 * 100%. [NOTE: 全部線程包括應用的線程和GC線程]設計

暫停: 意味着因爲GC線程的運行致使全部應用線程被暫停的時間 -> 應用線程暫停時間對象

4. 關係get

在理想狀況下, 想要GC取得高吞吐和短暫的暫停時間, 可是吞吐和暫停時間好像硬幣的兩面, 不可兼得!不可能同時取得最好的吞吐和最短的暫停時間。

簡而言之, GC一直要以一種方式運行,這種方式就是在達到一個安全點的時候, 所謂安全點的時機就是GC須要確保在GC在標記清除垃圾對象的時候,應用線程再也不改變全部對象的狀態。可是GC 會有額外的開銷,例如,內容切換、緩存消耗、JVM鎖機制中的安全開銷。這樣致使每次運行GC都會有額外的開銷。

若是想要JVM具備高吞吐, 須要避免GC期間的這些開銷。這種狀況下, 較少的GC是提升吞吐的一個辦法。這樣能夠同時處理多更得對象減小額外的開銷。

但是, 因爲不少對象須要掃描, GC花費的時間愈來愈多。這就增長了每一個GC的時間, 意味着暫停時間長了。

所以, 吞吐和暫停時間是互斥(矛盾)的,因此須要在不一樣的場景中權衡二者。

相關文章
相關標籤/搜索