gpt4 book ai didi

java - 声明变量 final 和 static

转载 作者:IT老高 更新时间:2023-10-28 20:41:14 27 4
gpt4 key购买 nike

此评论是在代码审查中发表的,发表评论的人已不在我们的团队中。

Any type that must be resolved by the classloader at runtime should never have instances which are held by references declared to be both final and static.

这是代码行:

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

我对声明记录器静态或非静态的争论很熟悉,但这个评论似乎更笼统。我找不到任何关于为什么 static 和 final 不好的解释。谁能详细说明一下?

最佳答案

该评论很可能与 Classloader Leaking (here is a good article) 问题有关。

简而言之,这个问题发生在需要重新加载类加载器的环境中。如果您通过类加载器动态加载类,然后尝试重新加载类加载器,则将静态最终字段与通过该类加载器创建的类的对象保持在一起将防止卸载类加载器本身。一旦发生这种情况,您将收到 OutOfMemoryError

上面链接的文章列出了可能导致此行为的主要罪魁祸首中的日志库,以及您可以采取的解决泄漏的措施(例如显式释放类加载器)。

关于java - 声明变量 final 和 static,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26241787/

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