Как известно, в современных приложениях львиная доля процессорного времени уходит на вызовы функций, и на простую арифметику.
Эти та область, где компиляторы могут оптимизировать код, и эта оптимизация будет заметна.
Я провёл небольшое тестирование, где сравниваются C, D, Scheme, Pascal, Java
Компиляторы - gcc, dmd, gdc, stalin, sun jde, fpc
В качестве теста на всех языках считается функция Фибоначчи от числа 45.
Функция намеренно реализована неэффективно. Особенность реализации в том, что функция будет вызываться очень часто.
Её текст на C:
Код
unsigned fibonacci(unsigned n) {
return n == 0 ? 0 : n == 1 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
}
На остальных языках код аналогичен, с точностью до синтаксиса.
Каждый тест запускался 3 раза. Время замерялось командой time.
Некоторые характеристики тестовой машины: CPU: Pentium D 3 GHz (dual core); RAM: 2 GiB
Результаты теста:
CODE
c-O0 (1)
real 0m25.608s
user 0m25.530s
sys 0m0.000s
c-O0 (2)
real 0m26.141s
user 0m25.700s
sys 0m0.100s
c-O0 (3)
real 0m25.603s
user 0m25.430s
sys 0m0.020s
c-O3 (1)
real 0m8.909s
user 0m8.880s
sys 0m0.010s
c-O3 (2)
real 0m8.921s
user 0m8.890s
sys 0m0.020s
c-O3 (3)
real 0m9.271s
user 0m9.070s
sys 0m0.060s
d-dmd (1)
real 0m23.863s
user 0m23.490s
sys 0m0.070s
d-dmd (2)
real 0m24.415s
user 0m24.030s
sys 0m0.070s
d-dmd (3)
real 0m23.819s
user 0m23.320s
sys 0m0.170s
d-gdc (1)
real 0m9.098s
user 0m8.940s
sys 0m0.050s
d-gdc (2)
real 0m9.077s
user 0m8.910s
sys 0m0.030s
d-gdc (3)
real 0m9.233s
user 0m9.050s
sys 0m0.020s
scheme (1)
real 0m38.923s
user 0m38.770s
sys 0m0.070s
scheme (2)
real 0m39.553s
user 0m38.630s
sys 0m0.390s
scheme (3)
real 0m39.363s
user 0m39.000s
sys 0m0.040s
java (1)
real 0m12.731s
user 0m12.680s
sys 0m0.010s
java (2)
real 0m12.828s
user 0m12.770s
sys 0m0.000s
java (3)
real 0m12.762s
user 0m12.610s
sys 0m0.010s
pascal (1)
real 0m23.176s
user 0m22.800s
sys 0m0.090s
pascal (2)
real 0m21.799s
user 0m21.790s
sys 0m0.010s
pascal (3)
real 0m21.670s
user 0m21.640s
sys
Как видно, Java опережает многие компилируемые языки, и вплотную приближается к C. К сожалению протестировать C# нет возможности.
Надеюсь, этот пример развеет миф о том, что байткод == тормоз.
Взято отсюда:
http://linuxforum.ru/index.php?s=8d9540 ... opic=44651