5
回答
jfinal开发过程中自动更新部署问题
华为云4核8G,高性能云服务器,免费试用   

开发过程中,对于java类的改动,jfinal可以自动检测到并自动更新,无需重启服务器,但是经常遇到内存溢出的情况,不知道是否有其他人也遇到过类似情况?以下为溢出的异常信息:

Loading changes ......

2013-02-26 13:32:59.521:WARN:oejuc.AbstractLifeCycle:FAILED jfinal: java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:421)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
    at oracle.jdbc.driver.T4CDriverExtension.allocateStatement(T4CDriverExtension.java:48)
    at oracle.jdbc.driver.PhysicalConnection.createStatement(PhysicalConnection.java:3204)
    at oracle.jdbc.driver.PhysicalConnection.createStatement(PhysicalConnection.java:3169)
    at com.mchange.v2.c3p0.impl.NewProxyConnection.createStatement(NewProxyConnection.java:96)
    at com.jfinal.plugin.activerecord.TableInfoBuilder.doBuildTableInfo(TableInfoBuilder.java:60)
    at com.jfinal.plugin.activerecord.TableInfoBuilder.buildTableInfo(TableInfoBuilder.java:44)
    at com.jfinal.plugin.activerecord.ActiveRecordPlugin.start(ActiveRecordPlugin.java:118)
    at com.jfinal.core.Config.startPlugins(Config.java:78)
    at com.jfinal.core.Config.configJFinal(Config.java:48)
    at com.jfinal.core.JFinal.init(JFinal.java:67)
    at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
    at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at com.jfinal.server.JettyServer$1.onChange(JettyServer.java:100)
    at com.jfinal.server.Scanner.compare(Scanner.java:87)
举报
小D
发帖于5年前 5回/1K+阅
共有5个答案 最后回答: 5年前
是 jetty 在 restart web context 后,JVM无法回收Permanent generation space内存区域。按照com.jfinal.server.Run_Configurations.txt 文件第九行对jvm进行配置就可以很大程度上缓解这个错误,但愿 JVM 在未来能解决此问题。即便是不解决通过增大  Permanent generation space配置也无压力,现在PC内存都很大
sun的jvm的问题。。永生区从历史的角度上说应该是为了提高性能。class load之后就不unload了。但是现在已经不合时宜了,而且本身也不是jvm规范。。现在的jvm已经有了卸载class的启动参数,不知道是否能回收掉这些class.没去折腾过,不过直接调整永生区大小能坚持很久了。。。

引用来自“JFinal”的答案

是 jetty 在 restart web context 后,JVM无法回收Permanent generation space内存区域。按照com.jfinal.server.Run_Configurations.txt 文件第九行对jvm进行配置就可以很大程度上缓解这个错误,但愿 JVM 在未来能解决此问题。即便是不解决通过增大  Permanent generation space配置也无压力,现在PC内存都很大
Java 8中再也没有PermGen了 所以等java8 就可以解决了
顶部