我们的Web应用程序遇到了复杂的情况
它是由STS /开发的Spring应用程序Tomcat 7.应用程序集成后Jasper report 4.6.0,它总是抛出`OutOfMemoryError:PermGen Space.然后,让它工作的唯一方法是重新启动应用程序.但过了一段时间它又发生了.这是异常之前的日志:
Oct 17, 2012 3:42:27 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Oct 17, 2012 3:42:30 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception …Run Code Online (Sandbox Code Playgroud) 编辑: - play ~run运行我的项目
如何删除这个问题,我的项目正处于测试阶段.每天5-6小时后它会突然停止并发出以下错误.该怎么做才能消除此错误?
我正在使用playframework 2.2在scala 2.1中开发这个项目
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
Caused by: java.lang.OutOfMemoryError: PermGen space
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:396)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:395)
at sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:113)
at sun.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:331)
at java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1376)
at java.io.ObjectStreamClass.access$1500(ObjectStreamClass.java:72)
at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:493)
at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:468)
at java.security.AccessController.doPrivileged(Native Method)
at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:468)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:365)
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:602)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1706)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1344)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
at …Run Code Online (Sandbox Code Playgroud) 我已经为此阅读了所有类型的解决方案.一个链接在评论
处理"java.lang.OutOfMemoryError:PermGen space"错误
是迄今为止我发现的最好的.虽然相当复杂.
关键是,我得到这个错误只是用Maven编译一个项目.
据我所知,到目前为止还没有应用程序服务器.发生什么了?
我该怎么办?
这是我的错误:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:02.743s
[INFO] Finished at: Mon Sep 24 17:48:50 CEST 2012
[INFO] Final Memory: 77M/894M
[INFO] ------------------------------------------------------------------------
---------------------------------------------------
constituent[0]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-a
pi-1.13.1.jar
constituent[1]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-c
onnector-wagon-1.13.1.jar
constituent[2]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-i
mpl-1.13.1.jar
constituent[3]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-s
pi-1.13.1.jar
constituent[4]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-u
til-1.13.1.jar
constituent[5]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/commons-
cli-1.2.jar
constituent[6]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-ae
ther-provider-3.0.4.jar
constituent[7]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-ar
tifact-3.0.4.jar
constituent[8]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-co
mpat-3.0.4.jar
constituent[9]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-co
re-3.0.4.jar
constituent[10]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-e
mbedder-3.0.4.jar
constituent[11]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-m
odel-3.0.4.jar
constituent[12]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-m
odel-builder-3.0.4.jar
constituent[13]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-p
lugin-api-3.0.4.jar
constituent[14]: …Run Code Online (Sandbox Code Playgroud) 我现在正在接受java.lang.OutOfMemoryError: PermGen space.我正在使用Jetty和Linux Ubuntu.我曾尝试阅读和尝试以前类似问题中提供的不同解决方案,但我没有取得任何成功.一个类似的问题是
处理"java.lang.OutOfMemoryError:PermGen space"错误
但这些解决方案似乎使用Tomcat而不是Jetty.如果我重新部署我的服务几次,我会不断出现记忆错误.例如,要测试这个,我将转到我的webapps文件夹并运行touch*.xml来更新时间戳,然后重新运行jetty,我得到了内存不足错误.在我的jetty文件夹(包含bin,doc等,lib,日志,模块,start.jar)我正在运行
java -jar ../start.jar
Run Code Online (Sandbox Code Playgroud)
但这给了我错误.然后我尝试了我在其他示例中读到的内容,例如:
java -jar ../start.jar JAVA_OPTS="-Xms256m -Xmx512m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
Run Code Online (Sandbox Code Playgroud)
要么
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
Run Code Online (Sandbox Code Playgroud)
要么
-XX:MaxPermSize=128m
Run Code Online (Sandbox Code Playgroud)
然后当我去firefox并导航localhost:8080并刷新时,在终端中我一直收到错误
java.lang.OutOfMemoryError: PermGen space
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用这里建议的一些额外的java选项来运行Jenkins war文件,但是我得到了异常:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at Main._main(Main.java:288)
at Main.main(Main.java:98)
Caused by: java.lang.IllegalArgumentException: Multiple command line argument specified: -XX:+CMSClassUnloadingEnabled
at winstone.cmdline.CmdLineParser.parse(CmdLineParser.java:68)
at winstone.Launcher.getArgsFromCommandLine(Launcher.java:391)
at winstone.Launcher.main(Launcher.java:359)
... 6 more
Run Code Online (Sandbox Code Playgroud) 我知道,使用反射 API,我们可以通过存储在字符串中的名称来调用方法。
但是,反射 API 不能用于高性能应用程序。在我的应用程序中,方法将以非常高的速度被调用。所以,我不能使用反射 API。
那么,反射 API 的替代方案是什么?
我做了研究,发现可以使用 cglib 和其他代码生成库。
但是,我没有找到任何通过存储在字符串中的名称来调用方法的示例。
使用反射替代方案的示例也很好。
更新: 实际上我正在实现一些主从通信 API。其中,slave 将远程调用 master 方法。而且,方法调用的速率非常高(每秒大约 50 次方法调用)。因为,主机不断轮询从机以获取任何响应。那么,我应该在如此高的调用率下进行反思吗?
有谁可以说我的申请有什么问题?
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
public boolean insertUser(User user) {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
} catch (HibernateException he) {
session.getTransaction().rollback();
return false;
}finally{
if (session != null){
session.close();
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这是我调用在数据库中插入用户的唯一方法,然后如果我尝试插入另一个,则启动此异常:
Initial SessionFactory creation …Run Code Online (Sandbox Code Playgroud) 我的eclipse配置.
Eclipse:最新版本(开普勒)
我的eclipse config.ini
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20130521-0416
-product
org.eclipse.epp.package.standard.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms40M
-Xmx512M
Run Code Online (Sandbox Code Playgroud)
更新后从Juno到Kepler.But和configuration我没有遇到任何问题.
我面临的例外是
Caused by: java.lang.OutOfMemoryError: PermGen space
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:28)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at net.sf.beanlib.provider.BeanPopulator.invokeMethodAsPrivileged(BeanPopulator.java:221)
at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:194)
at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:172)
at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:270)
at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:174)
at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:173)
at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:71)
at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:125)
at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:120)
at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:67)
at net.sf.beanlib.hibernate3.Hibernate3CollectionReplicator.replicate(Hibernate3CollectionReplicator.java:143)
at net.sf.beanlib.provider.replicator.CollectionReplicator.replicateCollection(CollectionReplicator.java:88)
at net.sf.beanlib.hibernate3.Hibernate3CollectionReplicator.replicateCollection(Hibernate3CollectionReplicator.java:79)
at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:101)
at …Run Code Online (Sandbox Code Playgroud) 我在使用Tomcat时遇到了一些问题.我正在部署Grails应用程序,当我添加新功能时,我在stacktrace文件中得到了这个(遗憾的是众所周知的)错误:
Caused by: java.lang.OutOfMemoryError: PermGen space
2014-01-13 19:28:35,753 [http-bio-8080-exec-26] ERROR StackTrace - Full Stack Trace:
org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.OutOfMemoryError: PermGen space
at gsp_liquidaciones_liquidacionDeComplejolist_gsp$_run_closure2.doCall(gsp_liquidaciones_liquidacionDeComplejolist_gsp.groovy:84)
at gsp_liquidaciones_liquidacionDeComplejolist_gsp.run(gsp_liquidaciones_liquidacionDeComplejolist_gsp.groovy:105)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
...
Run Code Online (Sandbox Code Playgroud)
我有一个基于Windows安装程序的tomcat安装,我也没有catalina.bat文件.谷歌搜索许多页面建议修改此文件(catalina.bat)或注册JAVA_OPTS变量,但没有任何作用.那么,我必须在哪里指定这些参数?:
SET JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC”
我试图通过Apache Tomcat 7 Properties窗口修改Java Options,但是在修改之后服务器无法启动.

我的电脑安装了4Gb RAM.
提前致谢.
如果我有2个inputStream对象分别读取/保存4gb和4mb的文件.物体的大小是多少?对象的大小取决于内容吗?
处理大量的Excel文件时,我面临每个宝石错误.
最近,在运行我们的应用程序时,我们遇到了内存不足异常.
这是异常发生之前的堆转储
Heap
def new generation total 1572864K, used 366283K [0x00000006b0000000, 0x000000071aaa0000, 0x000000071aaa0000)
eden space 1398144K, 13% used [0x00000006b0000000, 0x00000006bbb12d40, 0x0000000705560000)
from space 174720K, 100% used [0x0000000710000000, 0x000000071aaa0000, 0x000000071aaa0000)
to space 174720K, 0% used [0x0000000705560000, 0x0000000705560000, 0x0000000710000000)
tenured generation total 3495296K, used 2658714K [0x000000071aaa0000, 0x00000007f0000000, 0x00000007f0000000)
the space 3495296K, 76% used [0x000000071aaa0000, 0x00000007bcf06ba8, 0x00000007bcf06c00, 0x00000007f0000000)
compacting perm gen total 42048K, used 41778K [0x00000007f0000000, 0x00000007f2910000, 0x0000000800000000)
the space 42048K, 99% used [0x00000007f0000000, 0x00000007f28ccb80, 0x00000007f28ccc00, 0x00000007f2910000)
No shared spaces configured.
Run Code Online (Sandbox Code Playgroud)
看起来老几乎已经满了(76%).我假设当它最终达到100%OOM发生时.然而,看起来伊甸园只有13%.
有人可以解释为什么OOM会发生,即使年轻人还有一些空间吗?