所以我在Swing程序上遇到了一些非常大的内存和CPU泄漏,并意识到我没有在EDT上执行绝对必要的一切,但是愚蠢到将所有内容都传递给方法,最终意识到我是由于“按值传递”规则,复制对象及其2000个数组。
我的问题是,对于以下代码:
public class Test {
Object obj = new Object();
public void setOBJ(Object obj) {
this.obj = obj;
}
}
是否将this.obj
设置为obj
的新实例或obj
的引用?
此外,它是在每个情况下执行此操作还是在某些情况下可能会发生其中一种情况?我试试这个,但不知道从哪里开始以及可能发生的情况。
最后,在多线程中,是否会发生任何变化,或者它仍然会以同样的方式传递?只是好奇地说实话。
答案 0 :(得分:2)
setOBJ(Object obj)
将Object
的引用分配给this.obj
。它没有创建新实例。
另一方面,每次创建Test
的新实例时,都会创建一个新的Object
实例,并将其分配给obj
(Object obj = new Object();
的结果})。
问题是您调用setOBJ
的次数,以及每次是否向其传递新的Object
实例。我们无法通过您发布的代码来判断。