我使用任务管理器监控我的应用程序,发现 RAM 使用量不断上升。
我很快注意到我在 for 循环的每次迭代中初始化了一个新变量:
for (int i = 0; i < List.size(); i++)
{
data = List.get(i); //This is already declared outside
CustomThread thread2= new CustomThread(data);
executor.execute(thread2);
}
现在,在循环外部声明 CustomThread thread2
有什么好处吗?
稍后访问时,execute(thread2)
是否仍然连接到原始对象?或者,该对象可能被覆盖,并且每次执行
都会被覆盖,导致它做同样的事情(行为基于数据)?
编辑:
我大约需要 200 个线程(它们不是太重,但它们确实连接到网站),而且,代码片段和它之前的代码是一个每 20 秒调用一次的 runnable
(所以是的,我每分钟创建大约 600 个线程)
最佳答案
除了作用域之外,您在哪里声明变量并不重要; 创建对象的位置很重要,因为大概您需要在每个不同 CustomThread
对象上调用 executor.execute
称呼。 (如果不这样做,那么显然,在循环外创建一个对象并重用它。)
你的方式就是我的写方式,除了:
如果您不需要它做其他任何事情,您可以完全删除该变量:
executor.execute(new CustomThread(data));
我可能会在循环体内声明
data
,除非您有充分的理由在外部声明它。
...因为如果您在循环之外不需要它,那么扩大该 thread2
变量的范围没有任何好处。
关于java - 优化: Declaring variables used for a class constructor outside of loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49435295/