Arr*_*Cen 2 java performance logging
我正在做一个关于在Java框架中提高日志性能(特别是log4j)的项目.现在我有两个记录器从源读取并将相同的记录信息转储到两个不同的文件,我可以通过读取具有有限行数的文件或从源生成器读取来控制源,这将继续生成信息一直(无限多行).
现在我想评估两个记录器的性能,即在记录相同信息的情况下哪一个更快.你对这个怎么做有什么想法吗?PS我以为我需要一个线程来计算文件的行数,但我不确定如何.非常感谢任何帮助.
小智 5
Log4J不仅是开源开发的当前标准.它声称快速而灵活:速度第一,灵活性第二.但是,在危机方面存在一些陷阱.
日志请求的成本包括方法调用和整数比较.每次通话通常约为1-20ns(取决于您的处理器).但是,这不包括参数构造的"隐藏"成本.
一个简单的例子:
logger.debug("Value: " + x*y);
Run Code Online (Sandbox Code Playgroud)
无论是否实际记录消息,参数构造都将导致额外成本.参数构造的这些成本可能非常高并且取决于所涉及的参数的大小.
为避免参数建设成本:
if(logger.isDebugEnabled() {
logger.debug("Value: " + x*y);
}
Run Code Online (Sandbox Code Playgroud)
如果禁用调试,这将不会产生参数构造的成本.另一方面,如果记录器是启用调试的,则会产生两倍于评估记录器是否启用的成本:一次在debugEnabled中,一次在调试中.这是一个无关紧要的开销,因为评估记录器需要大约1%的实际日志记录时间.
因此,如果速度是一个真正的问题,您应该仔细检查您的日志记录语句中的"隐藏"成本.
资源:http://logging.apache.org/log4j/1.2/manual.html