sam*_*nta 5 java memory-leaks classloader
1)如果我使用以下Class.forName()被多次调用,它会导致内存泄漏吗?
Class.forName("MyClass")
Run Code Online (Sandbox Code Playgroud)
2)或者,是tomcat的WebAppClassLoader将检查是否"MyClass"已经加载并使用缓存的实例.
3)如果问题(2)的答案是"否"那么,如果我已经打开PermGen扫描并设置相关的jvm参数,那么先前加载的类是否会被垃圾收集.
如果我想避免重新加载类,那么使用类实例缓存的最佳方法是什么.我可以将类实例存储为HashMap
Pét*_*rök 10
1)不,一个类定义只被任何给定的类加载器加载一次.之后,它保存在内存中(在PermGen空间中)并在后续对类的引用中重用,直到类加载器存在.这是独立的阶级是如何引用:通过Class.forName,ClassLoader.loadClass或什么的.
同一个类定义可以多次加载到不同的类加载器中(导致内存中有多个类标记对象).它们被视为完全不同的类,即使它们是从完全相同的类文件加载的,也无法相互转换.
2)是的
3)N/A.
4)引用的文章提到该类在不同的类加载器中重新加载,因此我在1)下的解释适用.
| 归档时间: |
|
| 查看次数: |
2373 次 |
| 最近记录: |