Страницы

Поиск по вопросам

пятница, 29 ноября 2019 г.

Вопрос о heap memory в Java

#java


Возник вопрос о heap memory. Так вот обратите внимание на жирный курсив. в 1-м варианте
все нормально работает. Но вот во втором выскакивает 


  OutOfMemoryError: Java heap space. 


Кто подскажет почему?


public class idea_test {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("S:\\idea test\\src\\file.txt")); 
        ArrayList strings = new ArrayList();  

        (1)          
        String s;                                           
        while ((s = reader.readLine()) != null){
            strings.add(s);                                                     
        }

        (2)
        String s = reader.readLine();                                           
        while (s != null){
            strings.add(s);                                                     
        }

        reader.close();                                                         
        String[] strings1 = strings.toArray(new String[strings.size()]);        
        Arrays.sort(strings1);                                                  
        for (String s1 : strings1) {
            System.out.println(s1);
        }
    }
}

    


Ответы

Ответ 1



Ну так элементарно. В первом случае мы крутимся в цикле и при каждой итерации вызываем reader.readLine() после чего проверяем s на null, если все строки файла были прочитаны((s = reader.readLine()) != null == false), то благополучно вываливаемся из цикла. Во втором же случае у нас получается бесконечный цикл, так как мы один раз вызвали reader.readLine() а далее бесконечно крутимся в цикле (так как s != null - истинно всегда, ведь мы же не меняем s), добавляя в ArrayList одни и те же значения, что и приводит к OutOfMemoryError

Комментариев нет:

Отправить комментарий