2017-02-06 3 views
0

Впервые сегодня я встретил ошибку OutOfMemory. Я пытаюсь вычислить скользящие средние из некоторых данных в ArrayList и столкнулся с первым шагом .add(). Метод показан нижеArrayList.add() вызывает ошибку OutOfMemory?

public ArrayList<Long> getNdaySMA(List<HistoricalQuote> history, int range){ 
    long sum =0; 
    long SMA = 0; 
    ArrayList<Long> SMAs = new ArrayList<Long>(); 
    //realRange is made due to the differences in defining "range in calculation vs speech 
    //a 10 day range for day 9 is actually from prices of day0 to day9, inclusive 
    int realRange =range-1; 

    //First step, add in placeholder 0s for the days within the range that have no value 
    //so if 10 day range, we have 0-> 9 
    for (int i=0;i<i+realRange;i++){ 
     SMAs.add(i,0L); 
    } 

    //Next, actually calculate the SMAs for i.e. day 10 
    for (int i =0;i<history.size();i++){ 
     //should be k<10, 0......9 = 10 days 
     for(int k=i+realRange;k==i;k--){ 
      //Sum first from k=i+range-1 , go down to i. 
      //This should give us a value of RANGE 
      sum +=history.get(k).getClose().longValue(); 


     } 
     //after summing up, we add calculate SMA and add it to list of SMAs 
     SMA = sum/range; 
     //we add the corresponding SMA to index i+range, made up of values calculated from before it 
     //to excel 
     SMAs.add(i+realRange,SMA); 
     sum =0; 
    } 

    return SMAs; 
} 

StackTrace выглядит следующим образом

java.lang.OutOfMemoryError 
                   at java.util.ArrayList.add(ArrayList.java:154) 
                   at com.xu.investo.MethodDatabase.getNdaySMA(MethodDatabase.java:46) 

Где Линия 46 относится к

SMAs.add(i,0L); 

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

+0

Это это не проблема добавления длинной вашей петли - это бесконечный цикл, который никогда не заканчивает условие проверки «i

+0

Ваша проблема решена? –

+0

Да, я нашел решение, его второй ответ. –

ответ

0

выглядит как бесконечный цикл:

for (int i=0;i<i+realRange;i++) 

i всегда будет меньше i+realRange для realRange больше нуля:

0

Я думаю, что я определил проблему.

Я мог создать бесконечный цикл в этой линии

for (int i=0;i<i+realRange;i++){ 
    SMAs.add(i,0L); 
} 
Смежные вопросы