获取“时的Eclipse内存设置”;Java堆空间“;及;“内存不足”;

获取“时的Eclipse内存设置”;Java堆空间“;及;“内存不足”;,java,apache-flex,eclipse,memory,Java,Apache Flex,Eclipse,Memory,在eclipse中尝试启动和运行flex/java项目时,我使用eclipse、Tomcat和JRE不断得到“内存不足异常”和“java堆空间” 在研究如何调整内存设置时,我发现有三个地方可以调整这些设置: Eclipse.ini 窗口>首选项下的JRE设置 Catalina.sh或Catalina.bat 在这些不同的地方设置-xms和-xmx之间有什么区别?这意味着什么 有没有办法验证这些内存设置是否已相应设置 对于内存为2gb的计算机,最佳的-xms和-xmx设置是什么 还有其他记忆技

在eclipse中尝试启动和运行flex/java项目时,我使用eclipse、Tomcat和JRE不断得到“内存不足异常”和“java堆空间”

在研究如何调整内存设置时,我发现有三个地方可以调整这些设置:

  • Eclipse.ini

  • 窗口>首选项下的JRE设置

  • Catalina.sh或Catalina.bat

在这些不同的地方设置-xms和-xmx之间有什么区别?这意味着什么

有没有办法验证这些内存设置是否已相应设置

对于内存为2gb的计算机,最佳的-xms和-xmx设置是什么

还有其他记忆技巧吗

谢谢。

-xms是启动内存(在VM启动时),-xmx是VM的最大内存

  • eclipse.ini:运行eclipse的VM的内存
  • jre设置:从eclipse运行的java程序的内存
  • catalina.sh:tomcat服务器的内存

    • 有几个不同的内存设置是有充分理由的

      eclipse内存设置是因为eclipse是一个大型java程序。如果要在几个项目中打开大量文件,那么需要为Eclipse提供更多的ram。这只是“企业”系统上的一个问题,通常个人项目不会使用太多的文件句柄或接口

      JRE设置是在运行项目时允许java运行时使用多少ram。当您运行一些占用内存的应用程序时,这可能就是您想要的。我运行过一些数学项目,需要几GB的ram,并且必须告诉JRE一切正常,JVM一直假设我的程序处于某种泄漏失控状态,但我是故意这么做的,并且必须告诉JVM允许使用什么


      然后Catalina的内存设置是针对应用服务器Tomcat的。该服务器需要为每个应用程序和并发用户提供内存。这与JRE编号混合在一起,因为您的项目可能是一个web应用程序,我不确定哪一个需要内存

      首先,我建议您将问题缩小到哪个组件抛出“内存不足异常”

      这可以是:

    • Eclipse本身(我对此表示怀疑)
    • 您的应用程序在Tomcat下
    • JVM参数
      -xms
      -xmx
      表示堆的“启动内存”和“最大内存”。忘记“开始记忆”。现在,这对您没有帮助,只有在您确定应用程序将快速消耗此内存量时,才应更改此参数

      在生产环境中,我认为唯一可以更改的参数是Catalina.sh或Catalina.bat文件下的
      -xmx
      。但是,如果您使用配置好的Tomcat调试环境直接从Eclipse测试您的webapp,您只需转到“调试配置”>“Apache Tomcat”>“参数”>“VM参数”,然后在那里设置
      -xmx


      至于2gb的最佳
      -xmx
      ,这在很大程度上取决于您的环境和应用程序可能接受的请求数量。我会尝试从500mb到1gb的值。检查你的操作系统虚拟内存“区域”限制和JVM自身的限制。

      < P>如果你看到内存不足,考虑这是否合理:你真的需要这么多内存吗?如果不是(即,当您没有大型对象,并且由于某种原因不需要创建数百万个对象时),则有可能发生内存泄漏

      在Java中,这意味着您将对象的引用保留在某个地方,即使您不再需要它。常见的原因是忘记对资源(文件、数据库连接、语句和结果集等)调用close()


      如果您怀疑内存泄漏,请使用探查器查找哪个对象占用了所有可用内存。

      Eclipse中的内存也有一些问题,但对我们来说,问题不在于实际运行的时间,而在于Eclipse正在刷新(手动或自动),或者如果试图构建它,Eclipse崩溃并关闭

      日志中有一些信息:

      Heap
       def new generation   total 36352K, used 11534K [0x10040000, 0x127b0000, 0x14f00000)
        eden space 32320K,  29% used [0x10040000, 0x10994c30, 0x11fd0000)
        from space 4032K,  49% used [0x123c0000, 0x125aed80, 0x127b0000)
        to   space 4032K,   0% used [0x11fd0000, 0x11fd0000, 0x123c0000)
       tenured generation   total 483968K, used 125994K [0x14f00000, 0x327a0000, 0x50040000)
         the space 483968K,  26% used [0x14f00000, 0x1ca0ab38, 0x1ca0ac00, 0x327a0000)
       compacting perm gen  total 58112K, used 57928K [0x50040000, 0x53900000, 0x60040000)
         the space 58112K,  99% used [0x50040000, 0x538d2160, 0x538d2200, 0x53900000)
      No shared spaces configured.
      
      即使我调整eclipse.ini以使用这些值,它似乎也不会被应用

      -showsplash
      org.eclipse.platform
      --launcher.XXMaxPermSize
      1024M
      -framework
      plugins\org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
      -vmargs
      -Dosgi.requiredJavaVersion=1.5
      -XX:MaxPermSize=256m
      -Xms512m
      -Xmx1024m
      
      有人见过这个问题吗?

      将添加使用的项目非常大。

      在我们的案例中发现了两个问题

    • 内存停止,我们必须将启动perm size设置为更高的值。 我猜它使用内存的速度快于分配内存的速度。 就我们而言。 -XX:PermSize=256m -XX:MaxPermSize=256m

    • 我们正在使用Clearcase,Eclipse中使用了RationalClearCase SCM(7.0.0.2)中的插件。 这个插件就是Eclipse崩溃的原因。目前我们还不知道为什么,但知道这一点对其他人来说可能是件好事。被迫禁用它


    • 我们在尝试构建一个非常大的Flex项目时遇到了Ant的堆空间问题,这个项目可以通过增加分配给Ant的内存或添加fork=true参数来解决。它最终成为Flex3.4.0SDK中的一个bug。在轮询开发人员的sdk版本并恢复到3.3.0之后,我终于找到了答案

      为了好奇的人


      我跟踪到了一个接口文件,其中添加了一个附加的访问器对“get/set maskTrackSkin”。如果向接口添加了任何附加函数,则会出现堆空间错误,更糟糕的是,该接口不在出现堆空间错误的项目中。希望这对别人有帮助

      Eclipse中的Tomcat不使用catalina.sh或bat。要设置托管Tomcat的内存,请在服务器运行配置中使用VM设置

      我有以下设置:

      -vmargs
      ...
      -Duser.name=...
      -XX:PermSize=256m
      -XX:MaxPermSize=256m
      -Xmn128m
      -Xms256m
      -Xmx768m
      
      -vmargs -Xms256m -Xmx512m -XX:MaxPermSize=256m -XX:PermSize=64m
      
      Eclipse在我将PermSize设置为MaxPermSize之前随机崩溃。

      我的FLashBuilder是crashi
      -vmargs -Xms256m -Xmx512m -XX:MaxPermSize=256m -XX:PermSize=64m