class A {
void method1() {
B b = new B();
C c = new C();
// Option 1
List<Object> cachedObject = b.method1();
c.method1(cachedObject);
c.method2(cachedObject);
// Option 2
c.method1(b.method1());
c.method2(b.method1());
}
}
class B {
List<Object> method1() {
}
}
class C {
void method1(List<Object> a) {
}
void method2(List<Object> a) {
}
}
在选项2中,c.method1()的参数在返回之后是否可用于垃圾收集结果与选项1相比更好,在选项1中我们缓存对象并在两个方法调用中使用它c.method1( )和c.method2()考虑到在c.method1()和c.method2()调用之间发生了耗时的操作,因此在此期间仍然引用了缓存的对象,并且不能用于垃圾收集。
从内存利用率的角度来看,考虑到b.method1()返回的对象是巨大的(500MB +),哪个选项可以更好地工作?
答案 0 :(得分:0)
在Memory Utilization&amp; amp;性能。正确的答案实际上取决于您的情况。以下是我要问的一些问题......
我提供的一个解决方案是查看Java的WeakReference
类。此类允许您维护对不阻止垃圾回收的对象的弱引用。无论何时你想使用它,你都会进行空检查,如果是垃圾收集,你可以重新创建它。当您绝对不希望在内存中存在大对象的多个实例时,这很有用,因为一旦旧引用被垃圾回收,弱引用将只为null。