Big Data applications suffer from unpredictable and unacceptably high pause times due to Garbage Collection (GC). This is the case in latency-sensitive applications such as on-line credit-card fraud detection, graph-based computing for analysis on social networks, etc. Such pauses compromise latency requirements of the whole application stack and result from applications' aggressive buffering/caching of data, exposing an ill-suited GC design, which assumes that most objects will die young and does not consider that applications hold large amounts of middle-lived data in memory. To avoid such pauses, we propose NG2C, a new GC algorithm that combines pretenuring with an N-Generational heap. By being able to allocate objects into different generations, NG2C is able to group objects with similar lifetime profiles in the same generation. By allocating objects with similar lifetime profiles close to each other, i.e. in the same generation, we avoid object promotion (copying between generations) and heap fragmentation (which leads to heap compactions) both responsible for most of the duration of HotSpot GC pause times. NG2C is implemented for the OpenJDK 8 HotSpot Java Virtual Machine, as an extension of the Garbage First GC. We evaluate NG2C using Cassandra, Lucene, and GraphChi with three different GCs: Garbage First (G1), Concurrent Mark Sweep (CMS), and NG2C. Results show that NG2C decreases the worst observable GC pause time by up to 94.8% for Cassandra, 85.0% for Lucene and 96.45% for GraphChi, when compared to current collectors (G1 and CMS). In addition, NG2C has no negative impact on application throughput or memory usage.
翻译:由于垃圾收集(GC), 大数据应用会受到不可预测和令人无法接受的高暂停时间的影响, 这是因为垃圾收集(GC) 导致大数据应用出现不可预测和令人无法接受的高暂停时间。 为了避免这种停顿, 我们建议采用对延缓敏感的新GC算法, 如在线信用卡欺诈检测、 用于社交网络分析的基于图形的计算等。 这种暂停会损害整个应用程序堆的延缓要求, 并且由于应用程序具有很强的缓冲/ 隐藏数据, 暴露了一种不怎么合适的GC设计, 假设大多数对象会年轻地死去, 并且不认为应用程序在记忆中含有大量中年数据。 为了避免这种停顿, 我们提议采用新的 SG2C 算法, 将预加固前与 NGGGQ 相混合, 能够将对象分到不同的世代, 并且通过使用 GAGGGGG 来区分相近的一生, 我们避免了对象宣传( 复制代间数据) 和 升缩数据( 导致高压), 既要对热的GC 和 C 最接近的 CGVC 的目前, 和GARC 使用, 。