Мне интересно, как работает сборка мусора, когда у вас есть класс с отражением, используемый для получения некоторых значений полей. Как JVM осознает, что ссылки на значения в этих полях доступны и поэтому не пригодны для сбора мусора в настоящий момент, когда для доступа к ним не используется синтаксис формального языка?
Небольшой фрагмент, указывающий на проблему (хотя рефлексия здесь переоценена):
/**
*
*/
import java.lang.reflect.Field;
public class B {
protected B previous = null, next = null;
/**
*
*/
public B(B from) {
this.previous = from;
}
public void transition(B to) {
this.next = to;
}
public B next() {
try {
Field f = getClass().getField("next");
f.setAccessible(true);
try {
return (B)f.get(this);
} finally {
f.setAccessible(false);
}
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
public B previous() {
try {
Field f = getClass().getField("previous");
f.setAccessible(true);
try {
return (B)f.get(this);
} finally {
f.setAccessible(false);
}
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}
Ура,
Chris