Один вопрос - есть ли у вас неограниченное время для разработки вашего приложения или нет.Если у вас неограниченное время, то программы Java и Scala будут иметь одинаковую производительность, поскольку вы можете писать программы Scala, которые будут генерировать точно такой же байт-код, что и Java.
Но если у вас есть неограниченное время, почему бы и нетразрабатывать в C (или ассемблере)?Вы получите лучшую производительность.
Другой - насколько сложен ваш код ввода-вывода.Если это что-то довольно тривиальное, то Scala, вероятно, не принесет особой пользы, так как «мяса» недостаточно для использования его возможностей.
Я думаю, если у вас ограниченное время и сложная кодовая база ввода-вывода,Решение на основе Scala может быть быстрее.Причина, по которой Scala открывает двери для многих идиом, которые на Java слишком трудоемки, чтобы писать, поэтому люди избегают их и платят цену позже.
Например, параллельное выполнение вычисления для набора данных выполняется в Java с помощью ForkJoinPool, который необходимо создать, затем создать класс, обертывающий вычисления, разбить его для каждого элемента и отправить в пул,
В Scala: collection.par.map(calculation)
.Написание этого намного быстрее, чем Java, так что вы просто делаете это и имеете свободное время для решения других вопросов.
Из личного опыта у меня есть связанная история.Я читал в статье в блоге, что BuildR, инструмент сборки на основе ruby, был в два раза быстрее, чем Maven для простой сборки.Учитывая, что Ruby примерно в 20 раз медленнее, чем Java, я был удивлен.Итак, я профилировал Maven.Оказалось, что он примерно 1000 раз проанализировал один и тот же XML-файл.Теперь, конечно, с осторожным дизайном, они могли бы сократить это до одного раза.Но я предполагаю, что причина, по которой они этого не сделали, заключается в том, что прямой подход в Java привел к тому, что дизайн стал более сложным, чтобы измениться после него.С BuildR дизайн стал проще, а производительность лучше.В Scala вы чувствуете, что программирование на динамическом языке все еще находится на одном уровне с Java с точки зрения производительности.
ОБНОВЛЕНИЕ: Если подумать об этом, в Scala есть некоторые области, которые дают большую производительность, чемJava (опять же, если предположить, что узкое место ввода-вывода связано с кодом, который оборачивает операции ввода-вывода, а не с чтением / записью байтов): * Ленивые аргументы и значения - могут подтолкнуть затраты циклов ЦП к тому моменту, когда они действительно требуются * Специализация - позволяетпопросите компилятор создавать копии общих структур данных для собственных типов, избегая, таким образом, упаковки, распаковки и приведения.