Избегание боксов за счет передачи одноэлементного примитивного массива

Я работаю с интерфейсом, который принимает на вход тип Object. Для меня это прискорбно, поскольку у меня есть примитивные данные, которые мне иногда нужно передать через интерфейс. Это, конечно, заставляет меня боксировать.

Профилирование показало, что эта область является горячей точкой кода. Таким образом, я изучаю альтернативы, чтобы ускорить работу в этой области.

Сегодня у меня возникла идея предварительно выделить статический примитивный массив и сохранить в нем примитивное значение, а затем передать массив (а затем в реализации интерфейса взять двойное значение из массива .

Я написал код, чтобы проверить это.Для достаточно высоких значений (10 миллионов) я вижу, что метод массива ЗНАЧИТЕЛЬНО быстрее.По мере увеличения количества итераций моего теста они сходятся.

Мне интересно, задумывался ли кто-нибудь об этом подходе раньше и есть ли какие-либо предложения по его хорошему тестированию.

Пример кода:

Double data = Double.valueOf(VALUE);
inst.interface(data);
//inside interface(Object object)...
Double data = (Double) object;
double d = data.value();

vs ...

doublearray[0] = VALUE;
inst.interface(data);
//inside interface(Object object)...
double[] data = (double[]) object;
double d = data[0];

Спасибо! РБ

10
задан user321605 2 August 2011 в 03:07
поделиться