Кто-нибудь знает, почему java 7 не может собрать постоянное поколение приложения, в результате чего java.lang.OutOfMemoryError: PermGen, а java 5 собирает постоянное поколение, а приложение работает хорошо?
Приложение выполняет оценку выражений jython в цикле, одна итерация - ок. 5 сек. Тело цикла выглядит так:
PythonInterpreter py = new PythonInterpreter();
py.set("AI", 1);
((PyInteger)py.eval(expr)).getValue()
Скриншоты jvisual vm для приложения, запущенного в java 7 и java 5.
В обоих случаях используются одни и те же параметры:
-Xmx700m
-XX:MaxPermSize=100m
-XX:+HeapDumpOnOutOfMemoryError
-Xloggc:"C:\Temp\gc.log" -XX:+PrintGCDetails -XX:-TraceClassUnloading -XX:+PrintClassHistogram