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的时间, 意味着暂停时间长了。

所以, 吞吐和暂停时间是互斥(矛盾)的,因此须要在不一样的场景中权衡二者。

相关文章
相关标签/搜索