Влияние определений классов Scala на пространство перманента - PullRequest
5 голосов
/ 18 августа 2011

Стандартный шаблон, используемый в библиотеке классов Scala, - это определение классов внутри классов и признаков.И большинство операций объектов родительских классов приводят к созданию объектов этих внутренних классов.Каждый внутренний класс отличается для каждого объекта.

Например, см. Источник для scala.io.Source и LineIterator.Я думаю, что это самый простой в стандартной библиотеке.

Как видно из документов ниже, это два разных класса.библиотека коллекции использует тот же шаблон, как влияют на пространство permgen для длительных процессов?

1 Ответ

6 голосов
/ 18 августа 2011

Я не уверен, как вы пришли к выводу, что если s1 != s2, то s1.getLines.getClass != s2.getLines.getClass. Если я создам два экземпляра BufferedSource с использованием Source.fromFile, оба будут возвращать экземпляр одного и того же класса scala.io.BufferedSource$BufferedLineIterator, когда я вызываю getLines.

scala> s1 == s2
res6: Boolean = false

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

Это правда, что Scala создает много классов, но это делается во время компиляции, а не во время выполнения, поэтому perm gen не должен быть проблемой для длительных процессов.

...