Я вижу 'java.lang.OutOfMemoryError: PermGen space' при выполнении ~ 300 тестов JUnit и использовании контекста Spring. Трудно понять, что поглощает PermGen, поскольку:
-XX: + TraceClassLoading
и -XX: + TraceClassUnloading
включены, я не вижу дополнительных событий «загрузки» при выполнении последних 20-30 тестов перед OutOfMemoryError
. Последнее, по-видимому, предполагает, что PermGen заполняется чем-то помимо объектов Class, не так ли? Если да, то что это могло быть? Например, бывают ли обстоятельства, когда экземпляры класса хранятся в 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)
связанный
FWIW, корень моей проблемы, которая привела к этому посту, оказалась несколько тривиально: я предположил, что плагин Maven Surefire наследует настройки ВМ от MAVEN_OPTS (или экземпляра ВМ, на котором запущен mvn), когда он разветвляет ВМ - это не (boo). Их нужно указать явно с помощью argLine в конфигурации плагина. HTH.