poner - titledborder java
¿Cómo reducir la sobrecarga de inicio de Scala(/ Java)? (3)
¿En qué tipo de computadora lo estás usando? Obviamente, hay una sobrecarga de inicio de JVM pero esto es aún mayor si la JVM detecta que está ejecutando en una máquina de clase de servidor .
En la versión 5.0 de la plataforma J2SE, una clase de máquina denominada máquina de clase servidor se definió como una máquina con:
- 2 o más procesadores físicos
- 2 o más Gbytes de memoria física
Puede poner la JVM en modo cliente utilizando la opción -client
. El modo de cliente está sintonizado para un tiempo de inicio rápido.
También está el movimiento para modularizar la JVM (proyecto Jigsaw ) que mejorará aún más los tiempos de inicio, esto ha comenzado con JDK 1.6.0_10
.
Soy bastante ignorante del mundo Java (en su mayoría C / Python), pero Scala se veía lo suficientemente interesante como para atraerme. Un problema que tengo con él es la enorme sobrecarga de inicio: 0,3 segundos como mínimo, mucho más si lo hago. m usa el intérprete en lugar de compilar, en comparación con 0 efectivamente para Python o C. Así que, aunque el lenguaje es diez veces más rápido que Python una vez que está en funcionamiento, si intento usarlo para tareas simples, aún es mucho más lento práctica.
¿Hay alguna forma de reducir este tiempo, o es una parte inevitable de la JVM + el número de importaciones requeridas (implícitas) para un programa Scala?
Puede solucionar el tiempo de inicio de la JVM abriendo el REPL de Scala y luego cargando sus scripts directamente con el comando :load
. Esto compila (lleva algún tiempo, pero en la práctica no lo encuentro por mucho tiempo) el contenido del script y lo carga para su uso en el REPL. Por ejemplo:
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
Por ejemplo, un flujo de trabajo típico mío al escribir diferentes prototipos en Scala es el siguiente. Tengo un editor de texto abierto en una ventana y el Scala REPL en otra. Escribo mi código y luego lo cargo ( :load script.scala
). Los resultados producidos por el script están disponibles de inmediato (como se ve en la transcripción anterior, res7
) y también están disponibles las funciones, clases u objetos definidos en el script. Y es más rápido que ejecutar scala myScript.scala
ya que la JVM ya está cargada.
Si vas por la ruta compilada, usa fsc
(el compilador rápido de Scala). La primera vez que se invoca, crea un proceso de daemon que compila el código. Por lo tanto, solo tendrá que pagar el precio de inicio de JVM una vez. Solo tenga en cuenta que si cambia el valor de CLASSPATH
(la variable de entorno), tendrá que reiniciar fsc
(es algo que me ha molestado durante un tiempo).
-- Flaviu Cipcigan
Ver Nailgun