有人知道为什么Java 7无法收集应用程序的永久代,导致出现java.lang.OutOfMemoryError: PermGen错误,而Java 5可以收集永久代并使应用程序运行良好吗?
应用程序在循环中进行Jython表达式的评估,一次迭代大约需要5秒钟。循环主体如下:
PythonInterpreter py = new PythonInterpreter();
py.set("AI", 1);
((PyInteger)py.eval(expr)).getValue()
在Java 7和Java 5中运行的应用程序的jvisual vm截图。
两种情况下都使用相同的参数:
-Xmx700m
-XX:MaxPermSize=100m
-XX:+HeapDumpOnOutOfMemoryError
-Xloggc:"C:\Temp\gc.log" -XX:+PrintGCDetails -XX:-TraceClassUnloading -XX:+PrintClassHistogram