gpt4 book ai didi

java - 受本地类影响的参数生命周期 : possible pitfalls?

转载 作者:行者123 更新时间:2023-12-01 13:46:33 25 4
gpt4 key购买 nike

有一天,我关心代码中参数的生命周期,如下所示:

    void someMethod(final ComplexObject arg1, ComplexObject arg2) {

// .. some code

// new instance of Runnable is executed on another thread
post(new Runnable() {
@Override
public void run() { // note: arg2 is not referenced inside run()
// 1
// .. some code here
arg1.doStuff();
// 2
//.. some extra code here
} // 3
});
}

考虑通话:

someMethod(new ComplexObject(), // object1
new ComplexObject()); // object2

我假设新创建的object1只能在另一个线程使用run方法完成时进行GC'(行//3).
显然 object2 在这种情况下不受影响。

  1. 有人可以证实这些假设吗
  2. 是否存在实际场景(示例),人们应该警惕 object1 这种不可预测的生命周期延长,从而产生“泄漏”的可能性? (如果ComplexObject是一个“重”内存对象,这是特别不希望的)

最佳答案

你是对的,当你创建的Runnable()被GC时,arg1也将被GC,而不是在此之前,因为GC知道哪个对象持有引用到哪些对象。

我不会称之为泄漏,因为当内存中保存不需要的引用时就会发生泄漏,但在这里您需要这些引用。

关于java - 受本地类影响的参数生命周期 : possible pitfalls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20330418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com