新闻中心

软件开发公司log4j2.6免费进行垃圾回收

* 来源: * 作者: * 发表时间: 2020-01-07 0:07:37 * 浏览: 3
软件开发公司log4j2.6无垃圾收集。 Log4j2.6的较新版本是Java中流行的日志库Log4j2.6,它将引入一系列在无垃圾模式下运行的选项。此发行版继以前的发行版之后,试图提高日志库的性能,并得到了业界的积极响应。性能改进计划的负责人RemkoPopm表示,下一步是增加log4j可以在无垃圾模式下运行的方案数量。 7 2014年7月,log4j2.0在日志记录框架领域革命性地引入了异步记录器,与同步记录器相比,它使吞吐量提高了6到68倍。这些结果可能很深刻,但是日志记录框架的性能损失仍占高吞吐量,低延迟应用程序响应时间的很大一部分,这常常导致开发人员在部署过程中排除了日志记录框架。微调高性能应用程序以避免垃圾回收造成的停顿可以取得非常好的效果,log4j团队得出的结论是,这些性能改进可以带来更多的用户。从Java专家Kirk Pepperdine的性能和评论来看,这种假设是正确的:Java中的日志记录框架的情况并不乐观。到目前为止,我很少遇到客户的反馈,即他们的系统不受日志记录框架的负面影响。我遇到的一个极端示例是客户端面临4.5秒的时间限制,但是日志记录需要4.2秒(很大一部分压力来自异步附加程序)。我将对该次发行版非常感兴趣。通过避免创建临时对象来防止垃圾收集,这意味着需要尽可能多地重用现有对象。但是,在最初发行时,整个库并不是没有垃圾的。因此,想要实现此功能的开发人员需要注意附加程序,记录器,格式布局和API。使用限制。应用程序类型一些重用的对象存储在ThreadLocal区域中。对于独立应用程序,此设计不是问题,但可能导致Web应用程序发生内存泄漏。应用程序服务器可以将ThreadLocal保存在线程池中,这意味着即使卸载了应用程序,用于日志记录的对象仍将保持引用状态。因此,默认情况下,Web应用程序中通过ThreadLOcal重用对象的功能处于关闭状态,这意味着log4j无法在无垃圾模式下完全运行。 Log Recorder log4j防止垃圾回收的另一种方法是在将文本转换为字符数组时重用缓冲区。所有类型的应用程序都可以从中受益,并且此功能默认情况下处于启用状态。但是,使用同步记录器的多线程应用程序可能会影响性能,因为不同的线程需要竞争共享缓冲区。在这种情况下,您应该更喜欢使用异步记录器或禁用共享缓冲区。 Appender仅修改了一些附加程序以避免创建临时对象:控制台(控制台),文件(文件),RandomAccessFile(随机访问文件),上述附加程序的回滚附加程序,MemoryMappedFile(内存映射文件)。任何其他附加程序都会产生垃圾,需要回收。但是,应该注意,这些附加器可以避免垃圾回收本身,并且还有其他与I / O相关的因素会影响其性能。格式化的布局格式化的布局对于试图配置以实现无垃圾收集的开发人员而言可能是一个棘手的部分,因为他们不仅需要注意自己需要使用的布局,而且还要注意布局中的选项。 GelfLayout(GraylogExtendedLogFormat)布局仅在禁用压缩选项时才支持垃圾收集,而PatternLayout仅支持有限的转换模式,任何其他转换模式都将创建临时对象。 API的用法API本身也已进行了修改,以避免创建临时对象。除了以前的方法支持简单的可变长度参数(将创建临时数据)之外,log4j还添加了所有方法的重载版本,支持10多个参数。调用具有10个以上参数的方法仍将使用可变长度参数,该参数将创建一个临时数组。此限制对通过SLF4J使用log4j具有更大的影响,因为此外观库仅提供具有两个以上参数的非可变长度参数。如果要使用两个以上的参数并在垃圾回收模式下运行,则需要舍弃SLF4J。。对代码的影响尽管已经进行了向后兼容以防止开发人员更新代码,但是创建了一个临时对象类与log4j框架本身无关:基本数据类型的自动装箱。为了确保JVM不会用相应的对象替换基本数据类型,开发人员可以在将基本数据类型传递到log4j时使用静态方法Unboxer.box()。此方法允许log4j直接处理基本数据类型,而无需创建不必要的对象。尽管存在一系列限制,但这些更改已经有可能在具有严格性能要求的方案中显着改善日志记录体验。由于当前的限制而无法使用垃圾回收功能的开发人员可以继续关注更改列表,并可能在将来的发行版中提供进一步的改进。