Я использовал newInstance()
в своего рода критически важной области моего кода.Сигнатура метода:
<T extends SomethingElse> T create(Class<T> clasz)
Я передаю Something.class
в качестве аргумента, получаю экземпляр SomethingElse
, созданный с помощью newInstance()
.
СегодняЯ вернулся, чтобы убрать этот TODO производительности из списка, поэтому я провел несколько тестов оператора new
против newInstance()
.Я был очень удивлен штрафом за производительность newInstance()
.
Я немного об этом написал, здесь: http://biasedbit.com/new-vs-newinstance/
(Извините за саморекламу ... Я бы поставилтекст здесь, но этот вопрос вырастет из пропорций.)
Я хотел бы знать, почему флаг -server
обеспечивает такое повышение производительности, когда число создаваемых объектов значительно увеличивается ине для «низких» значений, скажем, 100 или 1000.
Я действительно усвоил урок со всем отражением, это просто любопытство по поводу оптимизаций, которые JVM выполняет во время выполнения, особенно с флагом -server
,Также, если я делаю что-то не так в тесте, буду признателен за ваш отзыв!
Редактировать: я добавил фазу прогрева, и результаты теперь более стабильны.Спасибо за ввод!