java - 优化: Declaring variables used for a class constructor outside of loop?

标签 java

我使用任务管理器监控我的应用程序,发现 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称呼。 (如果不这样做,那么显然,在循环外创建一个对象并重用它。)

你的方式就是我的写方式,除了:

  1. 如果您不需要它做其他任何事情,您可以完全删除该变量:

    executor.execute(new CustomThread(data));
    
  2. 我可能会在循环体内声明data,除非您有充分的理由在外部声明它。

...因为如果您在循环之外不需要它,那么扩大该 thread2 变量的范围没有任何好处。

关于java - 优化: Declaring variables used for a class constructor outside of loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49435295/

相关文章:

java - 如何在冒号之前的分号处分割字符串

java - 如何定义以连字符命名的任务?

java - 二维数组的随机生成器,简单游戏的累加字符串字母

java - 如何在 Jasper 报告中提取和使用存档中的图像?

java - 如何使用 jMockit 模拟标记为 Final 的类并具有私有(private)构造函数

java - 从 List<Object[]> 构建树关系图的有效方法

java - 科学计数法解释为 int 还是 float?

java - 如何获取scala中两个java.sql.timestamp字段之间的天数

java - 如何检查哪个文本字段可聚焦?

java - 如何将 CSV 文件加载到 Apache Arrow vectors 并将箭头文件保存到磁盘