Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
开发Java Web应用程序最有效的方法是什么?或者更具体地说,Wicket应用程序?_Java_Performance_Jvm_Hotswap_Hotdeploy - Fatal编程技术网

开发Java Web应用程序最有效的方法是什么?或者更具体地说,Wicket应用程序?

开发Java Web应用程序最有效的方法是什么?或者更具体地说,Wicket应用程序?,java,performance,jvm,hotswap,hotdeploy,Java,Performance,Jvm,Hotswap,Hotdeploy,这是我第一次在这里发帖,我会尽量把我的问题弄清楚 我试图找到开发Java Web应用程序的最佳流程。经过几个月的反复试验,我的web开发环境由以下部分组成: 框架:ApacheWicket 1.4.16 IDE:EclipseGalileo,带有m2eclipse插件 构建工具:Maven 2 数据访问:EclipseLink 2.1.1通过JPA 2.0和StaticWeave RDBMS:MSSQL 2005或更高版本及jTDS DI:GoogleGuice 2.0 开发web容器:嵌入Ma

这是我第一次在这里发帖,我会尽量把我的问题弄清楚

我试图找到开发Java Web应用程序的最佳流程。经过几个月的反复试验,我的web开发环境由以下部分组成:

框架:ApacheWicket 1.4.16 IDE:EclipseGalileo,带有m2eclipse插件 构建工具:Maven 2 数据访问:EclipseLink 2.1.1通过JPA 2.0和StaticWeave RDBMS:MSSQL 2005或更高版本及jTDS DI:GoogleGuice 2.0 开发web容器:嵌入Maven Jetty插件的Jetty服务器。 目标web容器:Tomcat 6.x或更高版本

我使用maven Jetty插件测试运行我的Web应用程序,在需要行精度跟踪时启用JPDA

每当对源代码进行更改时,我都必须重新加载我的应用程序才能生效。按ENTER键重新加载是可以的,但在多次重新加载后,Out 3~5取决于我的PermGen设置,OutOfMemoryException被抛出,我必须关闭并再次启动我的应用程序。我知道自动重新加载可以通过配置来实现,但它只会导致OOME更快,而不会导致过多的重新加载

在谷歌搜索之后,我意识到这与一些内存泄漏问题有关。我曾尝试放大MaxPermSize设置,但我的装备上的RAM是有限的,设置为真正大的东西是不合理的。顺便说一句,Tomcat7中引入了内存泄漏检测,我发现大多数内存泄漏来自jTDS、GoogleGuice和Wicket本身,但我对此无能为力

我能做些什么来加速我的开发过程吗?为了减少重新加载时间,我是否应该使用更高级的web容器,如GlassFish抱歉,我在这里买不起WebLogic或WebSphere。或者别的什么


提前感谢,欢迎评论

我有一个简单的Jetty包装器,用于在eclipse中启动webapp。如果我在调试模式下启动它,则不需要重新加载,除非我更改方法签名或字段名。不需要重新加载上下文

    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.webapp.WebAppContext;

    public static void main(String[] args) {
       Properties properties= ...//read properties from text file
       Server server = new Server(properties.getPort());
       WebAppContext webapp = new WebAppContext(
              properties.getWebApplicationPath(), properties.getContextPath());
    server.start();
       //.... and here can be key capture for stopping Jetty

    }
其中properties.getWebApplicationPath为./WebContent,或者根据maven项目结构的不同而有所不同

这并不能解决在Tomcat中部署时的内存泄漏问题,但对开发过程非常有帮助。
我也在使用Wicket和Guice,我没有注意到内存泄漏

我用,它真的很有用。我仍然需要时不时地重新启动服务器,但大多数更改都能正常工作。它非常适合像Wicket这样以Java为中心的框架。你也可以试试,如果你可以开发一个“黑客”版本的JDK。

我使用JRebel,它真的很有帮助。我仍然需要时不时地重新启动服务器,但大多数更改都能正常工作。它非常适合像Wicket这样以Java为中心的框架。如果您有一个JDK for development.OMG的“黑客”版本,您也可以尝试DCEVM。。。。我以前从来不知道有像JRebel或DCEVM这样的东西!我迫不及待地想马上试用这些解决方案,但现在是家庭周末!谢谢!我会在工作日检查这些@tetsuo顺便说一句,为什么我不能将你的评论标记为答案?引用:顺便说一句,Tomcat 7中引入了内存泄漏检测,我发现大多数内存泄漏来自jTDS、Google Guice和Wicket本身,但我对此无能为力。Wicket到底有什么问题?我们Wicket开发人员不知道任何会导致类加载器泄漏的事情。@martin-g我想他说的是频繁重新部署时的OOMEs。可能是e。GDB驱动程序等等。InfoQ有一个更好的解决方案。谢谢你的回答,但是方法签名修改,甚至新的类总是在开发周期中引入,看来JRebel或DCEVM是更好的解决方案。很抱歉,我没有足够的声誉投票支持这个答案。我试过JRebel和DECVM,DECVM不是一直都能工作,但是JRebel太棒了!这是我第一次认为第三方产品应该作为官方产品。