Будет ли эта линия

bufferedReader.readLine();

Без сохранения в переменную будет потреблять память?

0
Alaychem goes to Codidact 23 Ноя 2014 в 11:38
1
Да, конечно. Вы читали документацию BufferedReader? Что в нем непонятно? И что бы он ни делал, ему все равно приходится читать и создавать строку, а затем возвращать ее, а это потребляет память. Почему тебя это волнует. Память предназначена для использования.
 – 
JB Nizet
23 Ноя 2014 в 11:42
Я знаю, что readline() возвращает String! Вопрос в том, если возвращаемое значение не "сохраняется", будет ли оно потреблять память или автоматически "сгорать" JVM
 – 
Alaychem goes to Codidact
23 Ноя 2014 в 11:47
В какой-то момент JVM будет собирать мусор, как и каждый объект, который больше недоступен. Но это не то, что вы спросили.
 – 
JB Nizet
23 Ноя 2014 в 11:51

2 ответа

Лучший ответ

Насколько я знаю, он будет доступен для сборки мусора немедленно, потому что к нему не прикреплены никакие ссылки.

1
Sarthak Mittal 23 Ноя 2014 в 11:45
Но тем временем он будет потреблять всю память, необходимую во время его выполнения.
 – 
user207421
23 Ноя 2014 в 11:47
Да, я думаю, будет :)
 – 
Sarthak Mittal
23 Ноя 2014 в 11:48

Да, он будет потреблять память, потому что он, по крайней мере, должен выделить память для результата (даже если вы не назначаете его).

Вероятно, довольно скоро память будет очищена сборщиком мусора, потому что никто не ссылается на нее. Но нет никаких гарантий, когда будет запущен сборщик мусора. И ответ на этот вопрос в любом случае не имеет значения, потому что речь идет не о временных рамках, которые выделяется память.

Также обратите внимание, что он определенно не будет «оптимизирован», потому что он запускает побочный эффект, который должен выполняться, даже если результат немедленно отбрасывается. Компилятор и JVM «знают» это, и, следовательно, с точки зрения памяти это в значительной степени похоже на присвоение результата с последующей немедленной перезаписью результата чем-то другим.

2
Johannes Weiss 23 Ноя 2014 в 11:55