【问题标题】:Junit testing in play with java.lang.OutOfMemoryError has been caught, Java heap space使用 java.lang.OutOfMemoryError 进行 Junit 测试已被捕获,Java 堆空间
【发布时间】:2013-03-11 14:18:58
【问题描述】:

我正在尝试对 Web 应用程序进行一些 junit 测试,但我不断收到 OutOfMemoryError。我知道它在代码中发生的位置,但我不确定它为什么这样做。

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));
    }

任何帮助都会很好地说明为什么会发生这种情况。

编辑: 这是痕迹

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)

【问题讨论】:

  • 你能发布完整的堆栈跟踪吗?
  • 只是出于好奇,这段代码 sn -p long count = Survey.count(); 是做什么的?
  • java.lang.OutOfMemoryError:Java 堆空间。就是这么说的
  • 返回数据库中的调查数量。
  • 所以你不知道最后执行的是哪一行??添加日志语句以查找。这可能是序列化程序。你可能有一个周期。

标签: java testing junit playframework


【解决方案1】:

好吧,Unbinder.unbind() 似乎在一个循环中,调用它自己,每次调用它都会吸收一些内存;它可以使用在每次调用时使用的堆栈或连接到 AbstractStringBuilder 的东西来做到这一点。

内存不足是堆栈跟踪不一定指向问题行的时候;在这些情况下,堆栈跟踪通常会显示一些类似这样的循环。

【讨论】:

    猜你喜欢
    • 2019-11-28
    • 2021-09-09
    • 2011-10-24
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多