2013-08-02 2 views
0

Пока я пытаюсь запустить TestRun, у меня появились следующие ошибки. Я много пробовал, но не смог найти. Помоги мне! Я получил ошибку памяти Java Heap. Выполнение следующего кода также требует больше времени для запуска, наконец, он показывает ошибку, как указано ниже. Как правильно сделать этот код? Отладка это очень сложно для меня. Исключение в потоке «главное» java.lang.OutOfMemoryError: пространство кучи Java.java.lang.OutOfMemoryError (превышен верхний предел GC)

package website; 

import java.util.ArrayList; 

import Combination.averageM; 
import Combination.boatandstreamM; 
import Combination.fractionsM; 
import Combination.interestM; 
import Combination.measurementM; 
import Combination.numberM; 
import Combination.percentageM; 
import Combination.profitandlossM; 
import Combination.simplificationM; 
import Combination.timeanddistanceM; 
import Combination.timeandwM; 

public class ArrayOfSums { 

    ArrayList<sums> als; 
    String Q, A, scale, finalvalue; 
    double fv; 
    NewOptions pencil = new NewOptions(); 
    sums sumsObj; 

    public ArrayList<sums> giveArrayOfSums(int x) { 

     als = new ArrayList<sums>(); 
     int n = 0; 
     switch (x) { 

      case 1: 
       simplificationM pen = new simplificationM(); 

       while (n <= 19) { 

        pen.simplificationM(); 
        pencil.optionsCreator(pen.fv, pen.scale); 
        sumsObj = new sums(pen.Q, pen.A, pen.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 2: 
       numberM pen1 = new numberM(); 

       while (n <= 19) { 

        pen1.numberM(); 
        pencil.optionsCreator(pen1.fv, pen1.scale); 
        sumsObj = new sums(pen1.Q, pen1.A, pen1.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 3: 
       percentageM pen2 = new percentageM(); 

       while (n <= 19) { 

        pen2.percentageM(); 
        pencil.optionsCreator(pen2.fv, pen2.scale); 
        sumsObj = new sums(pen2.Q, pen2.A, pen2.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 4: 
       numberM pen3 = new numberM(); 

       while (n <= 19) { 

        pen3.numberM(); 
        pencil.optionsCreator(pen3.fv, pen3.scale); 
        sumsObj = new sums(pen3.Q, pen3.A, pen3.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 5: 
       fractionsM pen4 = new fractionsM(); 

       while (n <= 19) { 

        pen4.fractionsM(); 
        pencil.optionsCreator(pen4.fv, pen4.scale); 
        sumsObj = new sums(pen4.Q, pen4.A, pen4.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 6: 
       profitandlossM pen5 = new profitandlossM(); 

       while (n <= 19) { 

        pen5.profitandlossM(); 
        pencil.optionsCreator(pen5.fv, pen5.scale); 
        sumsObj = new sums(pen5.Q, pen5.A, pen5.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 7: 
       averageM pen6 = new averageM(); 

       while (n <= 19) { 

        pen6.averageM(); 
        pencil.optionsCreator(pen6.fv, pen6.scale); 
        sumsObj = new sums(pen6.Q, pen6.A, pen6.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 8: 
       timeandwM pen7 = new timeandwM(); 

       while (n <= 19) { 

        pen7.timeandwM(); 
        pencil.optionsCreator(pen7.fv, pen7.scale); 
        sumsObj = new sums(pen7.Q, pen7.A, pen7.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 9: 
       timeanddistanceM pen8 = new timeanddistanceM(); 

       while (n <= 19) { 

        pen8.timeanddistanceM(); 
        pencil.optionsCreator(pen8.fv, pen8.scale); 
        sumsObj = new sums(pen8.Q, pen8.A, pen8.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 10: 
       boatandstreamM pen9 = new boatandstreamM(); 

       while (n <= 19) { 

        pen9.boatandstreamM(); 
        pencil.optionsCreator(pen9.fv, pen9.scale); 
        sumsObj = new sums(pen9.Q, pen9.A, pen9.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 11: 
       interestM pen11 = new interestM(); 

       while (n <= 19) { 

        pen11.interestM(); 
        pencil.optionsCreator(pen11.fv, pen11.scale); 
        sumsObj = new sums(pen11.Q, pen11.A, pen11.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, 
          pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

      case 12: 
       measurementM pen12 = new measurementM(); 

       while (n <= 19) { 

        pen12.measurementM(); 
        pencil.optionsCreator(pen12.fv, pen12.scale); 
        sumsObj = new sums(pen12.Q, pen12.A, pen12.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, 
          pencil.jRadioButton4); 
        als.add(sumsObj); 
       } 
       break; 

     } 

     return als; 

    } 

} 

Класс Сумма:

package website; 

public class sums { 
    public String Question, Answer, Finalvalue, P1, P2, P3, P4; 
    public int choosenOption; 

    public sums(String Q, String A, String finalvalue, String p1, String p2, String p3, String p4) { 
     Question = Q; 
     Answer = A; 
     Finalvalue = finalvalue; 
     P1 = p1; 
     P2 = p2; 
     P3 = p3; 
     P4 = p4; 

    } 

    public void setChoosen(int n) { 
     choosenOption = n; 
    } 

} 

Класс TestRun:

package website; 

import java.util.ArrayList; 

public class TestRun { 

    /** 
    * @param args 
    */ 
    public static void main(final String[] args) { 
     ArrayOfSums SumsTable = new ArrayOfSums(); 
     //session.setAttribute("sumtin",SumsTable.giveArrayOfSums(8)); 

     ArrayList<sums> SumsSet = (ArrayList<sums>) SumsTable.giveArrayOfSums(8); 
     sums gotSum = (sums) SumsSet.get(1); 

     System.out.println(gotSum.Question); 

    } 
} 
+1

где вы увеличиваете n в вашей петле while? – veritas

+0

внутри переключатель кейс в ArrayOfSums класс. Наконец, я должен был вписать n ++. –

+1

Stackoverflow.com - это не практическое руководство для создания более совершенных Stackoverflows. –

ответ

2

Вы получаете эту ошибку из-за нехватки памяти JVM. Вам нужно увеличить размер кучи java, установив параметры JVM.
Я думаю, что проблема может быть здесь,

while (n <= 19) { 

       pen. simplificationM(); 
       pencil.optionsCreator(pen.fv, pen.scale); 

       sumsObj = new sums(pen.Q, pen.A, pen.finalvalue 
            , pencil.jRadioButton1, pencil.jRadioButton2 
            , pencil.jRadioButton3, pencil.jRadioButton4); 
       als.add(sumsObj); 
       n++;//added to increase value of n in each iteration 
      } 
      break; 

В коде выше вы не увеличивают значение из n .so while(n<=19) вызывает бесконечный цикл.

+0

Благодарим за помощь. Спасибо. –

0

Изменить размер Java кучи в JVM при запуске приложения с помощью -Xmx и -Xms варианты , как показано ниже:

java -Xmx512M -Xms512M TestRun 
+0

Спасибо за ваш доброй помощи. Я сам это выяснил. Я пропустил оператор инкремента внутри корпуса коммутатора (n ++). поэтому цикл никогда не заканчивается. Это приводит к этой ошибке. Спасибо за Вашу поддержку. –

1

java.lang.OutOfMemoryError бросается, когда виртуальная машина Java не может выделить объект, потому что он неактивен, и сборщик мусора не может сделать доступной больше памяти.

Чтобы избавиться от этого вы можете увеличить эти параметры в JVM:

  • Xms - мин размер кучи

The -Xms option sets the initial and minimum Java heap size. The Java heap (the “heap”) is the part of the memory where blocks of memory are allocated to objects and freed during garbage collection.

  • Xmx - размер макс кучи

This option sets the maximum Java heap size. The Java heap (the “heap”) is the part of the memory where blocks of memory are allocated to objects and freed during garbage collection. Depending upon the kind of operating system you are running, the maximum value you can set for the Java heap can vary.

Для получения дополнительной информации посетите http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

+0

Спасибо за вашу любезную помощь. Я пропустил оператор инкремента внутри корпуса коммутатора (n ++). поэтому цикл никогда не заканчивается. Я нашел его сейчас. Спасибо –

2

Debugging this is very difficult for me.Exception in thread "main" java.lang.OutOfMemoryError: Java heap space.

Это не проблема, вы можете отлаживать. Вы используете слишком много памяти для ограничения памяти, которое у вас есть. Существует не одна строка кода, которая может вызвать эту проблему.

Вместо этого вам нужно использовать профилировщик, чтобы определить, где была использована память. Я предлагаю вам увеличить ваш максимум до половины вашей основной памяти и прикрепить профилировщик (VisualVM лучше, чем ничего) и посмотреть, сохранились ли объекты.

Если вы используете коммерческий профайлер, это будет работать немного лучше и будет более четким в отношении того, где проблема. Я использую YourKit, и вы можете получить лицензию eval бесплатно.

I missed increment operator inside switch case (n++). so the loop never ends.

Я хотел бы получить в привычку использовать для цикла как

for(int i = 0; i <= 19; i++) 
+1

Спасибо за вашу любезную помощь. Я пропустил оператор инкремента внутри корпуса коммутатора (n ++). поэтому цикл никогда не заканчивается. Это приводит к этой ошибке. Спасибо за Вашу поддержку. –

+0

@ThennarasuRavindran Я обновил свой ответ. Вы хотите ограничить область своих локальных переменных. –

0

Это происходит, когда либо память, используемая в куче выше разрешенных или объекты, такие как списки становятся настолько большими, они превышают выделенную память JVM.
Это может быть решена путем ухода за массивами, например, для их удаления, когда объекты не нужны, очистка памяти сборщиком мусора, попытка не использовать массивы в цикле и просто заботиться о стеке.Плохая практика - просто увеличить допустимую память JVM, если это абсолютно необходимо.

+0

Спасибо за вашу любезную помощь. Я сам это выяснил. Я пропустил оператор инкремента внутри корпуса коммутатора (n ++). поэтому цикл никогда не заканчивается. Это приводит к этой ошибке. Спасибо за Вашу поддержку. –

Смежные вопросы