我最近使用tomahawk移动到myfaces(跟随此成功的线程link),每当我编写新代码并且应用程序(Tomcat)重新加载上下文时,我就会出现内存错误。这是通用的重新加载消息:“INFO:重新加载具有名称[/ Auctions]的上下文已经开始”
几秒钟之后:"Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space"
我知道我可以增加内存(顺便说一下,如果它可以直接在Tomcat中完成,或者在Eclipse的某个地方完成?)但是这个内存不足的错误只会在几次重新加载后弹出,现在它会减慢我的速度发展。
另外,我显然关心部署。
我该怎么办?
编辑:
有一件事似乎有关:我收到2条这样的警告信息:
"WARNING: Cannot serialize session attribute auctionsViewBean for session CB0149C43DF44F5AA6A084A022F1D418"
紧接着
java.io.NotSerializableException: org.apache.catalina.session.StandardSessionFacade.
然后发生内存不足错误。
现在,AuctionsViewBean实现了Serializable,但是我正在阅读here,除非它有一个无参数构造函数,否则bean不能重新序列化到会话中。我的bean确实有一个无参数构造函数,但我在其中设置了一些值。这会导致问题吗?
如果是这样 - 在任何情况下,实际上 - 将值设置为bean的最佳位置是什么?它是在构造函数中,还是在其生命周期的其他位置?
答案 0 :(得分:0)
我很久以前在MyFaces users list就记住了这个问题。发生警告是因为您有一个会话bean,并且该bean没有实现可序列化。重新加载上下文时,Tomcat会尝试序列化会话范围内的所有内容,从而导致问题。
可能会导致java.lang.OutOfMemoryError多次重新启动应用程序,但这是因为Tomcat从其类加载器加载和卸载类,因此无论如何都会发生这种情况。很久以前,发现了一些导致内存泄漏的问题MYFACES-3158,MYFACES-3001,MYFACES-2942,但请注意这些问题已得到解决。那段时间的问题是因为有些引用不允许GC回收tomcat webapp类加载器。