В Google провели сравнение производительности C++, Java, Go и Scala
Оценка числа строк кода, потребовавшихся для реализации поставленной задачи (в списке указан размер, относительно кода на языке Scala. Признаком Pro отмечены результаты оценки варианта кода после дополнительного тюнинга и использования специфичных для языка конструкций). Наиболее компактным языком оказался Scala - для решения задачи потребовалось 658 строк.
1.3x | C++ Dbg/Opt | (850 строк |
1.6x | Java | 1068 строк |
1.9x | Java Pro | 1240 строк |
1.0x | Scala | 658 строк |
0.5x | Scala Pro | 297 строк |
1.4x | Go | 902 строки |
1.2x | Go Pro | 786 строк |
Размер результирующих бинарных файлов, после сборки (показатели, относительно размера сгенерированного JAR-архива). Java и Scala работают поверх Java VM и генерируют байт код, а C++ и Go - готовые к исполнению машинные инструкции. Наиболее компактный результирующий файл получился у Java - 13 Кб, у языка Go бинарный файл занял 1.2 Мб, а оптимизированный вариант на C++ - 41 Кб.
45x | C++ Dbg | 592882 байт |
3.1x | C++ Opt | 41507 байт |
1.0x | Java | 13215 байт |
1.6x | Java Pro | 21047 байт |
3.6x | Scala | 48183 байт |
2.8x | Scala Pro | 36863 байт |
94x | Go | 1249101 байт |
92x | Go Pro | 1212100 байт |
Потребление памяти (показатели, относительно реализации на языке C++). Для работы кода на Java и Scala потребовалось в 6 раз больше памяти, чем на языке Cи. Наибольшую прожорливость проявил язык Go.
1x | C++ Opt | virt 184 Мб | real 163 Мб |
2.6x | C++ Dbg | virt 474 Мб | real 452 Мб |
6x | Java | virt 1109 Мб | real 617 Мб |
6x | Scala | virt 1111 Мб | real 293 Мб |
90x | Go | virt 16.2 Гб | real 501 Мб |
Время компиляции (показатели, относительно языка Go, который отличился высокой скоростью компиляции).
6.5x | C++ Dbg | 3.9 сек |
5.0x | C++ Opt | 3.0 сек |
5.2x | Java | 3.1 сек |
5.0x | Java Pro | 3.0 сек |
23.1x | Scala scalac | 13.9 сек |
6.3x | Scala fsc | 3.8 сек |
18.8x | Scala Pro scalac | 11.3 сек |
5.8x | Scala Pro fsc | 3.5 сек |
2.0x | Go | 1.2 сек |
1.0x | Go Pro | 0.6 сек |
Производительность (Показатели, относительно оптимизированного варианта на С++; Признаком "Opt" отмечен оптимальный вариант, предложенный в процессе анализа несколькими специализирующимися на оптимизации разработчиками. "Dbg" - написанный на скорую руку код).
1.0x | C++ Opt | 23 сек |
8.6x | C++ Dbg | 197 сек |
5.8x | Java 64-bit | 134 сек |
12.6x | Java 32-bit | 290 сек |
4.6x | Java 32-bit GC | 106 сек |
3.7x | Java 32-bit SPEC GC | 89 сек |
3.6x | Scala | 82 сек |
2.9x | Scala low-level | 67 сек |
2.5x | Scala low-level GC | 58 сек |
7.0x | Go 6g | 161 сек |
5.5x | Go Pro | 126 сек |
Дополнение: Один из инженеров Google указал, что путем переработки варианта на языке Java с целью более рационального использования сборщика мусора, удалось приблизить производительность Java-кода к результатам C++. Кроме того, повышение эффективности работы с Java-коллекциями и использование других типов данных может поднять скорость работы Java-кода в 2-3 раза. В ответ эксперты по С++ заявили, что им удалось поднять производительность варианта на С++ примерно в 6 раз.
Источник: http://www.opennet.ru/opennews/art.shtml?num=30784
|
0 | Tweet | Нравится |
|