• 1000 view, выберите
All References...
в контекстном меню и убедитесь, что на него ссылаются несколько объектов. Однако я не могу проверить эти объекты и не вижу их собственных ссылок:
введите описание изображения здесь
import java.lang.ref.WeakReference;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.Advisor;
import org.springframework.aop.framework.ProxyFactory;
public class TestGC {
public static void main(String[] args) throws Exception {
doStuff();
gc();
if (proxyRef.get() != null) throw new Exception("unexpected");
if (factoryRef.get() != null) throw new Exception("unexpected");
Advisor advisor = Objects.requireNonNull(advisorRef.get());
advisor.getClass(); // breakpoint here
}
static WeakReference<Advisor> advisorRef;
static WeakReference<ProxyFactory> factoryRef;
static WeakReference<Object> proxyRef;
static void doStuff() {
A obj = new A();
ProxyFactory factory = new ProxyFactory(obj);
factory.addAdvice(new CoalescingInterceptor());
advisorRef = new WeakReference<>( factory.getAdvisors()[0]);
factoryRef = new WeakReference<>( factory );
proxyRef = new WeakReference<>( factory.getProxy() );
}
static class A {
}
static class CoalescingInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation invocation) throws Throwable {
return invocation.proceed();
}
}
private static void gc() {
for (int i = 0; i < 100; i++) {
(new byte[1000000]).getClass();
System.gc();
}
}
}
Я хочу увидеть, каким объектам принадлежат LinkedList и массив.