Я всегда избегал отражения Java soley на основе его репутации медленности. Я достиг точки в дизайне моего нынешнего проекта, где его можно было использовать, чтобы мой код стал более читабельным и элегантным, поэтому я решил отложить его.
Я был просто удивлен разницей, я заметил временами почти в 100 раз больше времени работы. Даже в этом простом примере, где он просто создает пустой класс, это невероятно.
class B {
}
public class Test {
public static long timeDiff(long old) {
return System.currentTimeMillis() - old;
}
public static void main(String args[]) throws Exception {
long numTrials = (long) Math.pow(10, 7);
long millis;
millis = System.currentTimeMillis();
for (int i=0; i<numTrials; i++) {
new B();
}
System.out.println("Normal instaniation took: "
+ timeDiff(millis) + "ms");
millis = System.currentTimeMillis();
Class<B> c = B.class;
for (int i=0; i<numTrials; i++) {
c.newInstance();
}
System.out.println("Reflecting instantiation took:"
+ timeDiff(millis) + "ms");
}
}
Итак, мои вопросы:
-
Почему это так медленно? Есть ли что-то, что я делаю неправильно? (даже пример выше показывает разницу). Я с трудом верю, что он может быть на 100% медленнее, чем обычно.
-
Есть ли что-то еще, что может быть лучше использовано для обработки кода как данных (помните, что я застрял с Java на данный момент)