当前位置: 首页 > 知识库问答 >
问题:

在静态和非静态上下文中创建SLF4J记录器的开销是什么?

丁勇
2023-03-14
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
private final Logger log = LoggerFactory.getLogger(getClass());

记录器应该始终是最终的和静态的吗?

我意识到final基本上是必需的,所以我想知道在非静态上下文中使用SLF4J的开销实际上有多高。

问:

private final Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
@Inject private final Logger log;
@Inject private static final Logger log;

共有1个答案

闻人嘉颖
2023-03-14

非静态(实例)记录器变量的开销应该可以忽略不计,除非发生了许多实例化,比如10000个或更多实例化。这里的关键词可以忽略不计。如果实例化了许多(>10000个)对象,那么影响可能是可以测量的,但仍然很小。

更具体地说,实例记录器为每个对象实例增加一个引用(64位)的内存占用。在CPU端,成本是每个实例查找一次哈希,即在哈希表中查找适当的记录器的成本(小)。同样,这两个成本应该是可以忽略不计的,除非创建许多许多对象。

SLF4J常见问题解答中也讨论了这个问题。

 类似资料:
  • 问题内容: 我一直使用以下模式来构造(SLF4J)记录器: 到目前为止,这种方法一直有效,但是我想知道上下文是否在某个时刻以及是否需要始终传递具体的类文字而不是仅使用非静态记录器(例如 在此之前,基本上已经向LOG4J询问(并回答了) 记录器是否应为私有静态 和这里 记录器应该始终是最终状态还是静态状态? 我意识到基本上是强制性的,所以我想知道在非静态上下文中使用SLF4J的开销实际上有多高。 问

  • 我有以下代码: 当我尝试编译它时,会出现以下错误: 因此,我尝试使dbConnect静态如下:

  • 问题内容: 我有一群学生。首先,我想按标记对它们进行分组。然后,我想进一步将这些集合归为同名学生。 我收到一个错误消息, 非静态方法不能从静态上下文中引用。 是。我非常清楚,没有实例就无法引用非静态方法。但是,对于所有这些流操作,我对真正出了什么问题感到有些困惑。 而不是如何解决这个问题;我真的很想知道这是怎么回事。您的任何意见表示赞赏! 因为如果我写下面的分组是完全有效的; 这是我的Studen

  • 我尝试使用网络豆IDE在java中创建一个简单的类。每当我试图执行这个命令时,它都会发出这样的警告。从静态上下文引用的非静态变量“。谁能告诉我为什么会发生这种情况以及如何解决它。提前感恩节。

  • 问题内容: 在UNI atm上做Java课程,我遇到了骰子问题。 我有以下内容: 编译时,我得到:无法从静态上下文引用非静态变量n。我如何解决这个问题,同时让它从用户给定的值中随机化? 问题答案: 不是静态变量,因此您不能以静态方式()引用它。 由于它是类中的实例变量,并且您正在类中引用它,因此可以使用代替。

  • 我在阅读Kathy and Bert SCJP1.6时遇到了以下代码: 虽然是在跟踪变量的主题下,但我无法理解如何在main()方法(static)中引用非静态变量myBar?