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

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

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