我的Grails应用程序中有800多个单元测试用例。我正在使用下面提到的Grails App配置
app.grails.version=2.4.4
以下是Junit测试用例的Run Configuration的几行
-Djava.library.path=./lib
-Dserver.ip=localhost
-Dserver.port=9090
-XX:MaxPermSize=512m
-Xverify:none
我在Ubuntu机器上运行此应用程序。有时,在运行测试用例时,它会给我一个Out Of Memory错误,如下所示:
java.lang.OutOfMemoryError:Java堆空间 java.lang.Class.privateGetDeclaredMethods(Class.java:2442) java.lang.Class.getDeclaredMethods(Class.java:1808)
org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46) org.codehaus.groovy.util.LazyReference.get(LazyReference.java:37) org.grails.datastore.mapping.simple.engine.SimpleMapEntityPersister $ 1.query(SimpleMapEntityPersister.groovy:126)`
java.lang.OutOfMemoryError:Java堆空间 org.grails.datastore.mapping.simple.engine.SimpleMapEntityPersister.getPropertyIndexer(SimpleMapEntityPersister.groovy:90) org.grails.datastore.mapping.simple.query.SimpleMapQuery $ _closure35.doCall(SimpleMapQuery.groovy:431) org.grails.datastore.mapping.simple.query.SimpleMapQuery.executeSubQueryInternal(SimpleMapQuery.groovy:700) org.grails.datastore.mapping.simple.query.SimpleMapQuery.executeSubQuery(SimpleMapQuery.groovy:676) org.grails.datastore.mapping.simple.query.SimpleMapQuery.executeQuery(SimpleMapQuery.groovy:63) org.grails.datastore.mapping.query.Query.list(Query.java:542) grails.gorm.CriteriaBuilder.invokeMethod(CriteriaBuilder.java:329)
我参加了一个Sampler和Profiler内存管理测试,但他们无能为力。同样在每个测试用例Groovy类中,我使用@Before
和@After
注释来减少永久生成。
有什么我想念的吗?我想减少PermGen并永久摆脱Out Of Memory错误。