生成* .WAR(64位x 32位)

时间:2010-01-21 14:25:47

标签: java

使用64位VM而不是32位生成* .war文件有什么区别吗?

在使用我最近购买的新笔记本电脑部署应用程序后,我遇到了一个问题 - Windows 7和AMD 64位处理器。我没有触及任何应用程序源代码,但是当通过Eclipse / Galileo生成* .war然后将其部署到服务器中时,每当我试图显示任何内容时,我都会在运行时遇到“Permgen Space”异常报告 - 内置于Jasper报告 - 在服务器端,本地所有这些以及通过我的旧计算机(32位)1生成的旧* .war文件都正常工作。

关于方框的一些细节:

本地:

  • Java 1.6.0_18(64位)
  • Apache Tomcat / 6.0.20

服务器端:

  • Java 1.6.0_07(32位)
  • Apache Tomcat / 6.0.20

在这里您可以看到记录的异常:

javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:295)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
br.com.innosoft.jzytho.framework.struts.action.AcessoAction.processActionPerform(AcessoAction.java:166)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

如果您需要更多详细信息,请与我们联系。

提前致谢。

2 个答案:

答案 0 :(得分:2)

一般来说:不。

我使用完全相同的脚本通过生产为我们的应用程序构建战争。所有的生产服务器现在都是64位,但已经过去了32位。一些开发盒是64位,大约32位,但都使用相同的机制进行包装战争。

Permgen空间是与可用内存和类元数据相关的内存问题, 受处理器/ os体系结构的影响。

这是对此的讨论: Explaining java.lang.OutOfMemoryError: PermGen space

简短回答是在32位平台上启动jvm时添加一个jvm启动参数-XX:PermSize = 64m或--XX:PermSize = 128m。

答案 1 :(得分:1)

如果使用64位VM或32位生成WAR文件,则没有区别。 WAR基本上是ZIP文件格式。文件格式不随VM更改。