无垃圾记录
垃圾收集暂停是延迟峰值的常见原因,并且对于许多系统而言,花费大量精力来控制这些暂停。
许多日志库(包括以前版本的Log4j)在稳态日志记录期间分配临时对象,如日志事件对象,字符串,字符数组,字节数组等。这会对垃圾收集器造成压力并增加 GC 暂停发生的概率。
从版本2.6 开始,默认情况下 Log4j 以“无垃圾” 模式运行,其中重用对象和缓冲区,并且尽可能不分配临时对象。还有一个“低垃圾”模式,它不是完全无垃圾,但不使用ThreadLocal 字段。
Log4j 2.6 中的无垃圾日志记录部分通过重用ThreadLocal 字段中的对象来实现,部分通过在将文件转换为字节时重用缓冲区来实现。
关于缓冲区的问题
缓冲区形态有很多种,如点对象有三角形、矩形和菱形,对于线对象有双侧对称、双侧不对称或单侧缓冲区,对于面对象有内侧和外侧缓冲区。适合于不同应用。
数学表达:Bi=(x:d(xi,Oi)≤R)?
即对象Oi的半径为R的缓冲区,为距Oi的距离d小于R的全部点的集合。d一般是最小欧氏距离,但也可是其他定义的距离。