运行环境: 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(); }