Я вижу 'java.lang.OutOfMemoryError: пространство PermGen' при выполнении ~ 300 тестов JUnit и использовании контекста Spring.Трудно понять, что съедает PermGen, поскольку:
- в устойчивом состоянии приложение потребляет около 90 м пространства permgen
- Я пробовал -XX: MaxPermSize = 256 м для единицытесты - все еще заканчиваются
- С включенными
-XX:+TraceClassLoading
и -XX:+TraceClassUnloading
я не вижу дополнительных событий "загрузки" при выполнении последних 20-30 тестов перед OutOfMemoryError
.
Последнее, похоже, предполагает, что что-то кроме объектов Class заполняет PermGen, нет?Если так, что это могло быть?Например, существуют ли обстоятельства, когда экземпляры класса хранятся в PermGen?
Вот моя информация о виртуальной машине:
$ java -version
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
related
FWIW, корень моей проблемы, которая ускорила этот пост, оказался несколько тривиальным: я предположил, что плагин Maven Surefire наследует настройки виртуальной машины от MAVEN_OPTS (или экземпляра виртуальной машины, выполняющей mvn), когда он разветвляет виртуальную машину - это делаетне (бу)Нужно указать те, которые явно используют argLine в конфигурации плагина.НТН.