问题描述
我在 Eclipse IDE 3.2 中经常出现以下错误,我该如何从这些 OutOfMemory 中保存应用程序?
I am getting following error frequently in eclipse IDE 3.2, how could I save the application from these OutOfMemory?
java.lang.OutOfMemoryError: PermGen space
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(Unknown Source)
java.lang.ClassLoader.defineClass(Unknown Source)
java.security.SecureClassLoader.defineClass(Unknown Source)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1814)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
org.jboss.web.tomcat.service.WebAppClassLoader.findClass(WebAppClassLoader.java:75)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111)
org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
com.mfic.util.HibernateUtil.<clinit>(HibernateUtil.java:16)
com.mfic.dao.BaseHome.getSession(BaseHome.java:16)
com.mfic.core.helper.UserManager.findByUserId(UserManager.java:248)
com.mfic.core.action.Login.authenticate(Login.java:39)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
推荐答案
如果您在辅助 Eclipse 应用程序中遇到有问题的错误,请在 ini-XX:MaxPermSize=512m
/code> 无济于事.您需要进入 debug or run configuration->arguments
并将该部分添加到 VM 参数中.我还增加了其他内存限制,因此:
If you are getting the questioned error in the secondary Eclipse Application, adding -XX:MaxPermSize=512m
in ini
won't help. You need to go into debug or run configuration->arguments
and add that piece in VM arguments.I also increased others memory limits so:
-Dosgi.requiredJavaVersion=1.5 -Xms120m -Xmx2048m -XX:MaxPermSize=1024m
有帮助.
编辑.经过一些实验,我发现 Eclipse 确实从 ini 文件中获取了内存限制.但是...它只执行一次,在创建新工作区时.来自 eclipse.ini 中 -vmarg 的参数创建默认的 VM 参数行.因此,如果您正在处理现有工作区,请更改调试或运行配置.但也要更改 eclipse.ini,以便更好的未来.
Edit. After some experiments I've found, that Eclipse does take memory limits from the ini file. But... it does it only once, at the creation of a new workspace. Parameters from -vmarg in eclipse.ini create the default VM parameters line. So, if you are working on the existing workspace, change debug or run configuration. But change eclipse.ini, too, for better future.
这篇关于java.lang.OutOfMemoryError: PermGen 空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!