@Test
public void test() {
ClassLoader classLoader = getClass().getClassLoader();
ImmutableSet<ClassInfo> classInfoSet = ClassPath.from(classLoader)
.getTopLevelClassesRecursive("com.example");
for (ClassInfo classInfo : classInfoSet) {
Class<?> clazz = classInfo.load();
doSomething();
}
}
我正在尝试处理20,00个类来检查注释用法是否正确。问题是classInfo.load()为特定的类花费了太多时间(约占所有类的20%)。
我通过以下代码替换了此方法以进行调试,并确认Class.forName()对于特定类需要花费几分钟。
String className = classInfo.getName();
Class<?> clazz = Class.forName(className);
我已多次运行此程序,并且它总是在相同的类中减速并在其他类中加速。我尝试用20个类运行测试更小的包,但速度没有提高。那些缓慢的类具有正常的代码量,并且无法找到问题。
我认为这是一个内存问题,并将下面的设置添加到VM参数中,但没有任何改变。
-XX:MaxPermSize=2048M
-XX:-UseGCOverheadLimit
我能解决这个问题吗?