2011-08-18 15 views
5

Un modello standard utilizzato nella libreria di classi Scala è la definizione di classi all'interno di classi e tratti. E la maggior parte delle operazioni degli oggetti delle classi genitore porta a creare oggetti di quelle classi interne. Ogni classe interiore è diversa per ogni oggetto.Effetto delle definizioni della classe Scala sullo spazio genificatore perm

ad es. Vedere sorgente per scala.io.Source e LineIterator. Penso che questo sia il più semplice nella libreria standard.

Come i documenti suggeriscono di seguito sono due diverse classi.

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

Significato vengono create due classi.

Poiché l'intera raccolta utilizza lo stesso schema, quali sono gli effetti sullo spazio permgen per processi a esecuzione prolungata?

risposta

6

Non sono sicuro di come l'hai concluso se s1 != s2, quindi s1.getLines.getClass != s2.getLines.getClass. Se creo due istanze di BufferedSource utilizzando Source.fromFile, entrambe restituiranno un'istanza della stessa classe scala.io.BufferedSource$BufferedLineIterator quando chiamo getLines.

scala> s1 == s2 
res6: Boolean = false 

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

E 'vero che alla Scala crea un sacco di classi, ma questo è fatto a tempo di compilazione, non runtime, quindi perm gen non dovrebbe essere più di un problema per i processi di lunga esecuzione.

Problemi correlati