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

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

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