2013-03-11 102 views
1

我正在嘗試爲web應用做一些junit測試,並且不斷收到OutOfMemoryError。我知道它在代碼中發生了什麼,但我不知道爲什麼它會這樣做。Junit使用java.lang.OutOfMemoryError進行測試已被捕獲,Java堆空間

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) 
+0

你能發佈完整的堆棧跟蹤嗎? – 2013-03-11 14:20:33

+0

只是出於好奇,這段代碼片斷是什麼?long count = Survey.count();'做什麼? – SudoRahul 2013-03-11 14:25:19

+0

java.lang.OutOfMemoryError:Java堆空間。多數民衆贊成它說 – user1179321 2013-03-11 14:25:24

回答

0

那麼,它似乎Unbinder.unbind()是在一個循環中,主叫本身,並且在每個調用它吸收一點的存儲器;它可以使用它在每次調用時使用的堆棧,或者連接到AbstractStringBuilder的東西。

內存不足是堆棧跟蹤不一定指向問題行的一次;在這些情況下,堆棧跟蹤通常會顯示一些類似的循環。

相關問題