Я вижу это любопытное поведение сборщика мусора
public class A {
public static void main(String[] args) {
String foo;
try {
foo = "bar";
int yoo = 5; //1
} catch (Exception e) {
}
int foobar = 3;//2
}
}
. если я перехожу к отладке и ставлю точку останова на //1, foo не равен нулю, и его значение равно «bar», но в точке останова //2 foo имеет значение null, это может быть трудно понять во время отладки. Мой вопрос заключается в том, есть ли какая-либо спецификация, в которой говорится, что это законное поведение сборщика мусора
С этим небольшим изменением он не собирает мусор :
public class A {
public static void main(String[] args) {
String foo;
try {
foo = "bar";
} catch (Exception e) {
throw new RuntimeException(e);
}
int foobar = 3;
}
}
. Почему?