Являются ли невидимые ссылки все еще проблемой в недавних JVM?

я читалПроизводительность платформы Java (к сожалению, ссылка, кажется, исчезла из интернета, так как я изначально задал этот вопрос), и раздел A.3.3 обеспокоил меня.

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

У последних JVM, в частности версии 1.6.0_07 Sun, все еще есть это ограничение? Если так, то у меня много кода для анализа ...

Я задаю вопрос, потому что статья написана в 1999 году - иногда все меняется, особенно в мире GC.

Поскольку документ больше не доступен, я хотел бы перефразировать проблему. В документе подразумевается, что переменные, которые были определены внутри метода, будут считаться корнем GC до тех пор, пока метод не завершится, а не до окончания блока кода. Поэтому установка переменной в null была необходима, чтобы позволить объекту, на который ссылаются, быть сборщиком мусора.

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

Код извыбранный ответ хорошо иллюстрирует проблему. В версии JVM, на которую есть ссылка в документе, объект foo не может быть подвергнут сборке мусора, когда он выпадает из области видимости в конце блока try. Вместо этого JVM будет держать открытую ссылку до конца метода main (), даже при том, что никому не удастся использовать эту ссылку.

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

Ответы на вопрос(4)

Ваш ответ на вопрос