여기에 포함 된 인스턴스는 동봉 된 인스턴스가 살아있는 한 가비지 수집 대상이 아닙니다.가비지 콜렉션에 대해 인스턴스를 둘러 쌀 수있는 해결 방법
interface Foo<T> {
T compute();
default Foo<T> memoize() {
return new Foo<>() {
T result = null;
boolean cached = false;
@Override
public T compute() {
if (!cached) {
result = Foo.this.compute();
cached = true;
}
return result;
}
};
}
}
이렇게하면 문제가 해결됩니까?
interface Foo<T> {
T compute();
default Foo<T> memoize() {
return Foo.memoize(this);
}
private static <T> Foo<T> memoize(Foo<T> original) {
class Bar implements Foo<T> {
T result = null;
Foo<T> foo;
Bar(Foo<T> original) {
foo = original;
}
@Override
public T compute() {
if (foo != null) {
result = foo.compute();
foo = null;
}
return result;
}
}
return new Bar(original);
}
}
이것이 [최소] (https://stackoverflow.com/help/mcve) 확신합니까? – Michael
@ 마이클 나는 그렇게 믿는다. – gdejohn