gpt4 book ai didi

java - 在 Java 中登录时如何避免创建未使用的 String 实例

转载 作者:行者123 更新时间:2023-12-02 06:00:57 26 4
gpt4 key购买 nike

我定义了一个 Util 类来使用 log4j 进行日志记录,方法如下:

public static void info(String msg) {
if (logger.isInfoEnabled())
logger.info(msg);
}

但是如果日志级别设置为“错误”(因此 logger.isInfoEnabled()false),并且我使用下面的日志,将创建两个 String 实例?

LogUtil.info("String instance" + stringParam);

即使这两个String实例可能被gc回收,构造一个实例仍然是有成本的。

我想如果我在调用 logger.info(msg) 之前检查日志级别可能会有帮助,但这可能代码不干净,这就是我定义 Util 类的原因。

如果我不将级别设置为信息,我如何编写一个干净的代码,它既不会记录任何内容也不会创建 String 实例?

最佳答案

不要定义 Util 类,这样可以避免一些字符串创建开销。

除此之外,您的 isInfoEnabled 检查完全没有意义,因为记录器本身会进行检查。

使用:

logger.log(Level.INFO, "Message {0} with {1}", new Object[] { param1, param2 });

并且您将避免大部分字符串创建开销,因为它只会 toString() param1param2 并构造最终消息,如果INFO 级别已打开。

分配新的 Object[] 数组会产生开销,但很小

关于java - 在 Java 中登录时如何避免创建未使用的 String 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com