Gan*_*thy 33 java eclipse memory jvm initialization
我在eclipse IDE 3.2中经常出现以下错误,如何从这些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)
Run Code Online (Sandbox Code Playgroud)
Gan*_*nus 36
如果您收到在二级Eclipse的应用程序的质疑误差,增加-XX:MaxPermSize=512m
的ini
也无济于事.您需要进入debug or run configuration->arguments
并在VM参数中添加该部分.我还增加了其他内存限制,因此:
-Dosgi.requiredJavaVersion=1.5 -Xms120m -Xmx2048m -XX:MaxPermSize=1024m
Run Code Online (Sandbox Code Playgroud)
它有所帮助.
编辑.经过一些实验,我发现Eclipse确实从ini文件中获取了内存限制.但是......它只创建了一个新的工作区.eclipse.ini中-vmarg的参数创建默认的VM参数行.因此,如果您正在处理现有工作区,请更改调试或运行配置.但是,为了更好的未来,也要改变eclipse.ini.
Bal*_*usC 20
你的项目占用了大量的内存.为Eclipse提供更多内存.编辑eclipse.ini
以修改或添加以下行-vmargs
.
-Xms256m -Xmx512m -XX:MaxPermSize=512m
假设你至少有2GB的RAM.
小智 5
允许Java应用程序仅使用有限数量的内存.在应用程序启动期间指定特定应用程序可以使用的确切内存量.为了使事情变得更复杂,Java内存被分成不同的区域,其中一个区域被称为PermGen.
在JVM启动期间设置所有这些区域的大小.如果未明确设置大小,将使用特定于平台的默认值.
所以 - 该java.lang.OutOfMemoryError: PermGen space
消息表明内存中的永久大小区域已耗尽.
这个名为PemGen的特定区域是一个加载和存储Java类的专用区域.这包括以下内容:
这就是它.更多的点点滴滴,但它不会影响实际内存消耗超过百分之几.所有这些都分配给永久性的一代,并留在永久的一代.
如您所见,永久生成大小要求取决于加载的类的数量以及此类声明的大小.因此很容易看出导致此类错误的主要原因:要么将太多类或太大的类加载到永久代.
症状的快速修复很容易 - 如果我们已经耗尽了堆中的PermGen区域,我们需要增加它的大小.如果没有给你的JVM足够的肘部空间,这个解决方案确实很有帮助.因此,请更改应用程序启动配置并添加(或增加(如果存在)以下内容:
-XX:MaxPermSize=512m
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
83265 次 |
最近记录: |