当我们发现没有任何类加载不断增加导致非堆内存增加时,我们正在对我们的一个遗留应用程序进行性能测试.
现在我正在寻找rootcauses,我能想到的一件事是,我在几个地方使用Class.forName,如下所示:
Test a = (Test) Class.forName(className, false, Test.class.getClassLoader()).newInstance();
这可能是一个原因吗?
如果classname在上面的代码语句中是相同的,那么调用class.forName会反复加载同一个类.
应用程序服务器:Jboss 6.1 EAP
JDK:1.6.27
最佳答案 因为,类加载器会相同,所以它不会再次加载类.再次.只有当您有多个类加载器在不同的时间点加载类时,才能重新加载同一个类.
每个类加载器首先检查它要加载的类是否已经加载.如果未加载,则仅加载它.