Кто-нибудь знает, почему 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