#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
Комментариев нет:
Отправить комментарий