Подтвердить что ты не робот

Как уменьшить накладные расходы Scala (/Java)?

Я довольно не осведомлен о мире Java (в основном, C/Python), но Scala выглядел достаточно интересным, чтобы втянуть меня. Одна из проблем, с которой я столкнулся, - огромные накладные расходы на запуск - минимум 0,3 секунды, гораздо больше, если я использую интерпретатор вместо компиляции, по сравнению с эффективным значением 0 для Python или C. Поэтому, хотя язык в десятки раз быстрее, чем Python, когда он начинает работать, если я пытаюсь использовать его для простых задач он все еще значительно медленнее на практике.

Есть ли способ уменьшить это время или это неизбежная часть JVM + количество требуемых (неявных) импорта для программы Scala?

4b9b3361

Ответ 1

На каком компьютере вы его используете? Очевидно, что есть накладные расходы на запуск JVM, но это еще больше, если JVM обнаруживает, что вы работаете на серверном классе.

В платформе J2SE версии 5.0 класс машины, называемый машиной серверного класса, был определен как машина с:

  • 2 или более физических процессора
  • 2 или более Гбайт физической памяти

Вы можете поместить JVM в клиентский режим, используя опцию -client. Клиентский режим настроен на быстрое время запуска.

Существует также переход на модульная JVM (проект Jigsaw), что еще больше улучшит время запуска - это началось с JDK 1.6.0_10.

Ответ 3

Вы можете обойти время запуска JVM, открыв Scala REPL, а затем загрузив свои скрипты непосредственно в него с помощью команды :load. Это компилируется (требуется некоторое время, но на практике это не так) содержимое script и загружает его для использования в REPL. Например:


scala> :load testScript.scala
Loading testScript.scala...
import scala.collection.mutable.Map
memory: scala.collection.mutable.Map[Int,Int] = Map()
fib: (Int)Int
res7: Int = 165580141

scala> fib(10)
res1: Int = 55

scala> fib(11)
res2: Int = 89

scala> fib(12)
res3: Int = 144

scala> fib(13)
res4: Int = 233

Например, типичный рабочий процесс моего при написании разных прототипов в Scala заключается в следующем. У меня есть текстовый редактор, открытый в одном окне, и Scala REPL в другом. Я пишу свой код и загружаю его (:load script.scala). Результаты, полученные с помощью script, сразу доступны (как видно из приведенного выше стенограммы, res7), а также доступны любые функции, классы или объекты, определенные в script. И это быстрее, чем запуск scala myScript.scala по мере того, как JVM уже загружен.

Если вы скомпилировали маршрут, используйте fsc (быстрый Scala компилятор). При первом запуске он создает процесс демона, который компилирует код. Поэтому вам придется заплатить только стартовую цену JVM. Просто обратите внимание, что если вы измените значение CLASSPATH (переменная среды), вам придется перезапустить fsc (это то, что некоторое время прослушивало меня).

-- Flaviu Cipcigan