2011-08-18 13 views
5

Un patrón estándar utilizado en la biblioteca de clases de Scala es la definición de clases dentro de clases y rasgos. Y la mayoría de las operaciones de los objetos de las clases principales dan como resultado la creación de objetos de esas clases internas. Cada clase interna es diferente para cada objeto.Efecto de las definiciones de clase de Scala en el espacio generador de perm

p. Ej. Ver fuente para scala.io.Source y LineIterator. Creo que este es el más simple en la biblioteca estándar.

Como los documentos sugieren a continuación son dos clases diferentes.

val s1:Source = ... 
val s2:Source = ... 
s1.getLines.getClass != s2.getLines.getClass //true if s1 != s2 

Se crean dos clases.

Como toda la biblioteca de colecciones utiliza el mismo patrón, ¿cuáles son los efectos sobre el espacio permgen para procesos de larga ejecución?

Respuesta

6

No estoy seguro de cómo concluyó que si s1 != s2, entonces s1.getLines.getClass != s2.getLines.getClass. Si creo dos instancias de BufferedSource utilizando Source.fromFile, ambas devolverán una instancia de la misma clase scala.io.BufferedSource$BufferedLineIterator cuando llamo al getLines.

scala> s1 == s2 
res6: Boolean = false 

scala> s1.getLines.getClass == s2.getLines.getClass 
res7: Boolean = true 

Es cierto que Scala crea un montón de clases, pero esto se hace en tiempo de compilación, no en tiempo de ejecución, por lo que perm generación no debe ser más de un problema para los procesos de larga duración.

Cuestiones relacionadas