Scala Tools 2.9.0 и общее количество загруженных классов - PullRequest
1 голос
/ 26 января 2012

Мы используем метод interpret () tools.nsc.interpreter.IMain для выполнения скриптов scala на сервере. Прекрасно работает, нет утечек памяти и т. Д. Единственная проблема заключается в том, что jvisualvm сообщает, что классы «Всего загружено» увеличиваются для этого процесса (никогда не насыщаются).

Это вызвано из-за интерпретации ()?

Является ли общее количество классов, загружаемых процессом, чем-то, о чем мы должны беспокоиться? размер кучи очень хорошо себя ведет.

Мы находимся на Scala 2.9.0 и Java 7u2

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Я думаю, что вы должны быть обеспокоены, потому что классы имеют тенденцию загружаться в пространство perm gen (которое отдельно передается в кучу)

Поскольку вы запускаете компилятор во «время выполнения» (снова и снова по звукам), вы можете получить множество классов, загруженных в perm gen. Если бы я был вами, я бы протестировал систему с гораздо большим количеством файлов, чем вы собираетесь использовать вживую, и посмотрел бы, не угрожает ли вам заполнение разрешения.

Существует опция для JVM, которая будет зависеть от способности JVM выгружать классы во время выполнения. Это может помочь, но я бы порекомендовал вам проверить до и после

-XX:+CMSClassUnloadingEnabled
0 голосов
/ 26 января 2012

Если я прав, это связано с тем, что определения классов хранятся в неизменяемой космической аналитике JVM (PermGen) и не относятся к Scala. Любое Java-приложение, которое выполняет динамическую загрузку классов, страдает от этого (т.е. JRebel).

Я слышал, что запланированные изменения для этого, возможно, уже в JRE7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...