1、 e:\tomcat7\bin\catalina.bat添加如下语句:set JAVA_OPTS=-server -Xms512m -Xmx512m -Xss256k -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

解决方案 »

  1.   

    一 般指定一个 -Xmx512m 这种参数就可以,其它的参数调节是要针对你的机器和程序运行情况测试出一个统计数据来才好计算出合理的值的,通常你只是为了不让 JVM 占用太多内存,并不是你的程序因为内存不够而出错了。因此多数情况下只需要限定最大堆大小就好了,其它参数让 JVM 按默认值去计算出来。一般当我们程序占用太多内存时就可能需要明确地通过观察对比多个情况后总结出来一个合理的参数并指定给 JVM。PermSize 永久代尺寸太大那么新生代尺寸就会太小,当新生代中的对象在经历过多次的 GC 后依然没有被销毁时就表示这个对象不应该再侍在新生代堆空间中,这时 JVM 会把它们移到永久代中。如果新生代空间太小,那就会有很多可能不应该待在永久代的对象确跑到了永久代中而影响 GC 性能, 永久代中 JVM 进行一次 GC 所花的时间会明显比新生代长很多,特别是当你在桌面型操作系统中开了多任务时,回忆一下当你开了 Java 程序和其它非 Java 程序同时工作,并且当前 Java 程序最小化了,然后你去吃饭,半小时后回来切换到 Java 程序中时,这个过程可能会花了很多时间,有时候 5分钟都没有切换过来,这就是当 Windows 段页式虚拟内存管理碰上 Java 堆内存紧张时常见的现象。而这种现象基本上对于非 Java 程序来说不严重。