我遇到了 PMD 规则问题避免在循环中实例化新对象
。下面是一些示例代码:
import java.awt.Dimension;
public class PMDDemo {
public static void main(final String[] args) {
final Dimension[] arr = new Dimension[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Dimension(i, i); // rule violation here
}
}
}
PMD 在代码中的标记位置向我提供了上述规则违规。我应该如何创建一个类的 n 个实例而不在循环中创建它们?
我知道 PMD 的一些规则是有争议的(例如 onlyOneExit 规则)。但到现在为止,我至少明白了他们背后的想法。我不明白这条规则背后的原因。有人可以帮我吗?
最佳答案
对于您的特定用例,在循环之后保持对新对象的引用是没有意义的。。因此,您的解决方案没有真正的替代方案。
更一般地说,creating short lived objects in Java is cheap *(除了 GC 将更频繁地运行的隐藏成本)。特别是分配几乎是免费的,GC 的时间主要取决于可到达对象的数量——对于典型的 GC 算法,死对象不会增加 GC 时间。
如果 JIT 检测到创建了不必要的对象,它还可以执行各种优化。
显然,不推荐创建无用对象,但尝试重用对象通常会适得其反。
作为一个实际示例,您可以查看 this post这表明在循环中创建一个新集合比在循环之前创建一个并在每次迭代时清除它更便宜。
* 感谢@RichardTingle 提供链接
关于java - PMD:避免在循环内实例化新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17340421/