gpt4 book ai didi

java - 多次使用class.forname会导致内存泄漏吗? (在tomcat内部运行)

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:36 28 4
gpt4 key购买 nike

1)如果我使用下面的Class.forName()被多次调用,会不会造成内存泄漏?

Class.forName("MyClass") 

2) 或者,tomcat 的 WebAppClassLoader 是否会检查 "MyClass" 是否已经加载并使用缓存的实例。

3) 如果问题 (2) 的答案是“否”,那么如果我打开 PermGen 清扫并设置相关的 jvm 参数,那么之前加载的类是否会被垃圾收集。

如果我想避免重新加载类,使用类实例缓存的最佳方法是什么。我可以将类实例存储为 HashMap

最佳答案

1) 不,一个类定义只能由任何给定的类加载器加载一次。之后,它被保存在内存中(在 PermGen 空间中)并在后续对该类的引用中重复使用,直到类加载器存在。这与类的引用方式无关:通过 Class.forNameClassLoader.loadClass 或其他方式。

虽然相同的类定义可以多次加载到不同的类加载器中(导致内存中有多个类 token 对象)。这些算作完全不同的类,不能相互转换,即使它们是从完全相同的类文件加载的。

2) 是

3) 不适用

4) 引用文章提到该类在不同的类加载器中重新加载,因此我在 1) 下的解释适用。

关于java - 多次使用class.forname会导致内存泄漏吗? (在tomcat内部运行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10244553/

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