eclipse java.lang.OutOfMemoryError: Java heap space

运行环境: STS(eclipse -Xms40m -Xmx768m -XX:MaxPermSize=1024m)+win7(8G内存)

运行单元测试,报错: java.lang.OutOfMemoryError: Java heap space

 

相信这个错误比较常见.我这边出现的问题是,即使设置了eclipse的参数还是不行.google之, 查出原因如下.

junit不使用eclipse自身的jvm参数. 囧...

知道原因就好改了:

1    单独运行junit,在jvm参数里填加:-Xms128m -Xmx1024m  (注:具体参数根据自身机器和需求来确定)

2    ant中单元测试:  <junit maxmemory="1024m" printsummary="yes"

                                 haltonfailure="no" fork="yes" forkmode="perBatch">

                                  ...

                               </junit>

               (关键就是增加红色字体部分)

可以使用以下代码来查看内存状况:

public void testMemoryUsage() {

        Runtime runtime = Runtime.getRuntime();

        NumberFormat format = NumberFormat.getInstance();

        long mb = 1024*1024;
        StringBuilder sb = new StringBuilder();
        long maxMemory = runtime.maxMemory();
        long allocatedMemory = runtime.totalMemory();
        long freeMemory = runtime.freeMemory();
        
        long usedMemory = allocatedMemory - freeMemory;

        sb.append("free memory: " + format.format(freeMemory / mb) + "mb,");
        sb.append("  allocated memory: " + format.format(allocatedMemory / mb) +"mb,");
        sb.append("  max memory: " + format.format(maxMemory / mb) + "mb,");
        sb.append("  used memory: " + format.format(usedMemory / mb) +"mb,");

        sb.append("  total free memory: " + format.format((freeMemory + (maxMemory - allocatedMemory)) / mb) +" mb");
        
        System.out.println("memory usage:-"+sb);
        System.gc();
    }

猜你喜欢

转载自xiayh04.iteye.com/blog/1981092