Новые оптимизации компилятора VM. Часть 4: System.arraycopy()
Функция
java.lang.System.arraycopy() интенсивно используется и в библиотеках JDK и
в обычных Java-приложениях. Для повышения производительности
компиляторы встраивали эту функцию в код (inline), но не делали
никаких других отптимизаций, повышающих скорость ее выполнения
(не проверяли выравнивание, перекрывающиеся блоки памяти, и т. д.). В результате,
производительность была неплохой, однако ее можно было улучшить.
В HotSpot 1.6 для каждого размера типа данных на ассемблере написаны высокоэффективные процедуры, предполагающие неперекрывающиеся блоки памяти. При этом компилятор производит простой тест: если блоки перекрываются, то используется тот же код, что и раньше, в противном случае вызываются ассемблерная процедура. Эта оптимизация была портирована и в HotSpot 1.5.
Как результат, наблюдается небольшое уменьшение производительности для малых массивов (1–4 элемента), а для массивов с числом элементов более 20-и наблюдается как минимум двукратное увеличение скорости копирования.
Игорь Привалов
опубликовал vmrobot ( авг 23 2006, 08:36:54 PM MSD ) Permalink Комментарии [1]

опубликовал Никита Январь 09, 2007 at 03:32 PM MSK #