Junit测试正在使用java.lang.OutOfMemoryError,java堆空间
我正在尝试对一个web应用程序进行一些junit测试,但我一直发现OutOfMemoryError。我知道它发生在代码中的什么地方,但我不确定它为什么这样做Junit测试正在使用java.lang.OutOfMemoryError,java堆空间,java,testing,junit,playframework,Java,Testing,Junit,Playframework,我正在尝试对一个web应用程序进行一些junit测试,但我一直发现OutOfMemoryError。我知道它发生在代码中的什么地方,但我不确定它为什么这样做 Survey survey = new Survey(); SurveyLayoutColumn column1 = new SurveyLayoutColumn(); column1.addAnswerSpace(new Answer()); SurveyLayoutColumn colum
Survey survey = new Survey();
SurveyLayoutColumn column1 = new SurveyLayoutColumn();
column1.addAnswerSpace(new Answer());
SurveyLayoutColumn column2 = new SurveyLayoutColumn();
column2.addAnswerSpace(new Answer());
column2.addAnswerSpace(new Answer());
SurveyLayoutColumn column3 = new SurveyLayoutColumn();
column3.addAnswerSpace(new Answer());
survey.addLayoutColumn(column1);
survey.addLayoutColumn(column2);
survey.addLayoutColumn(column3);
survey.addQuestion(new Question());
survey.addQuestion(new Question());
survey.addQuestion(new Question());
survey.addQuestion(new Question());
Application app = new controllers.Application();
app.saveSurvey(survey);
long count = Survey.count();
assertEquals(count,0);
它发生在app.saveSurvey(surey)上,下面是该方法的代码
public static void saveSurvey(Survey survey) {
System.out.println("Survey title is: " + survey.title);
survey.published = true;
survey.save();
Map<String, Object> viewData = new HashMap<String, Object>();
viewData.put("status", "success");
JSONSerializer serializer = new JSONSerializer();
serializer
.include("status")
.exclude("*");
renderJSON(serializer.serialize(viewData));
}
看起来Unbinder.unbind()在一个循环中,调用它自己,每次调用它都会吸收一点内存;它可以使用堆栈(每次调用时都使用该堆栈)或与AbstractStringBuilder连接的东西来实现这一点
内存不足是堆栈跟踪不一定指向问题行的一次;在这些情况下,堆栈跟踪通常会显示这样的循环。您可以发布完整的堆栈跟踪吗?出于好奇,这段代码片段是什么代码>do?java.lang.OutOfMemoryError:java堆空间。这就是它所说的返回数据库中的调查数量。所以你不知道最后执行的是哪一行??添加日志语句以查找。它可能是序列化程序。你可能有一个周期。
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
at java.lang.StringBuilder.append(StringBuilder.java:119)
at play.data.binding.Unbinder.unBind(Unbinder.java:106)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:63)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:63)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:63)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:63)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:63)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:63)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:63)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:63)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)
at play.data.binding.Unbinder.unBind(Unbinder.java:63)
at play.data.binding.Unbinder.unBind(Unbinder.java:110)