当我们发现没有任何类加载不断增加导致非堆内存增加时,我们正在对我们的一个遗留应用程序进行性能测试。
现在我正在寻找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
答案 0 :(得分:2)
因为,类加载器会相同,所以它不会再次加载类。再次。只有当您有多个类加载器在不同的时间点加载类时,才能重新加载同一个类。
每个类加载器首先检查是否已加载要加载的类。如果未加载,则仅加载它。