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中,我們緩存對象並在兩個方法調用c.method1()和c.method2()中使用它,因爲在c.method1()和c.method2()調用之間會發生耗時的操作,因此緩存的對象在此期間仍然被引用,並且不可用於垃圾回收。保持參照對象爲未來的方法調用或長方法
從內存利用率的角度來看,考慮到b.method1()返回的對象是巨大的(500MB +),哪個選項效果會更好?
有一件事是肯定的,垃圾收集不會發生,因爲*耗時的操作* ..它依賴於對象的引用類型保持。 – nullpointer
有了這樣一個通用的問題,答案几乎「取決於」。人們可以想象根據一種績效指標或另一種績效指標更好的情況。 – the8472