未使用的导入和对象是否会对性能产生影响


75

我怀疑Java代码中未使用的导入和未使用的对象是否会对性能产生影响?

假设一个对象已初始化并且从未使用过,会发生什么?未使用进口的成本是多少?



为什么不使用EclipseOrganize Imports函数?
juergen d 2012年

或在IntelliJ或NetBeans或任何类似的IDE中组织导入。
彼得·劳瑞

1
这肯定会影响代码的管理:)
混乱

Answers:


69

这是一个非常普遍的问题。

像大多数性能问题一样,最好的方法是编写最清晰,最简单的代码,因为这可以提高代码的可维护性,并有助于确保代码即使更改后也能正常运行。(聪明/难以理解/不必要地开始,详细的代码可以快速运行,但是由于只是凡人而改变,它的运行速度会慢得多)

未使用的导入对编译器有微不足道的影响,但是字节码或运行时中没有导入。

可以对未使用的对象进行优化,但是最好避免使用这些对象,因为它们几乎总是会影响性能,但是更重要的是,使阅读和维护代码更加困难。


1
我们还可以在编译过程中提及一些其他的CPU滴答声。更多的代码-需要更多的时间来优化和编译
无序

感谢你的回答!您是否有我可以参考的信息来源?(除了这个答案...)
Eduardo Bezerra

2
从字节引用规范中可以看到@EduardoBezerra,未使用导入,因此它们可以在运行时起作用。
彼得·劳瑞

24

未使用的导入对运行时的性能没有影响。它纯粹是一种名称空间机制。但是,您应该始终仅导入所需的可读性,并避免名称空间冲突。

除了代码可读性以及代码的可维护性之外,通过整理导入,可以更快地编译Java代码(但是,不引人注意),但是运行时性能不会受到影响,因为生成的字节代码不受导入不规则的影响。生成的字节码保持不变。


3
请提供参考unused imports have no performance impact
RanRag

3
更准确地说,在运行时对性能没有影响。但是,根据进口数量的不同,COMpilation的速度可能较慢但并不明显。
Frankline

为什么不引人注意?当然,这取决于您要进行多少次编译?例如,我们有一个持续编译多个项目的CI构建服务器-因此,即使是最小的优化也应该会稍微提高编译性能,对吗?
ryan 2013年

如果某件事情比平时要花更长的时间,您会注意到它...假设它通常需要不到几天的时间。如果通常需要一年时间怎么办?您不会注意到它,因为它只是那个大小的噪音。除了0.274%的性能提升外,还有更多值得关注的事情。如果您确实需要一点点增加,扔出更好的硬件或改进编译器,那么您将获得的收益远远超过零花钱。
Chinoto Vokro

@SantiBailors“一整天”出什么了?那一天是计算机,而不是您。计算机无法修复错误(除非已编程解决?),否则不需要您。在1000次迭代循环中获得1/1000的变化仍然只是1/1000增益,我看不出你的意思。如果有人想付给您这么小的钱,那对您来说是件好事,否则就是浪费时间。
Chinoto Vokro '18年

8

尽管对编译的影响很小,但对部署的影响却很糟糕。我刚刚遇到了一个未使用的导入,该导入需要一个单独的库,该库成为了maven依赖项。幸运的是,没有发现其他传递依赖问题,但.war文件无缘无故变厚了。在webapp类加载器中添加一个多余的jar。


1

尽管Java文件中未使用的导入不会造成任何危害,但是不必要地增加了Java源文件的长度和大小。


0

是的,如果我们在java类中引用未使用的import语句,则会对性能产生一些影响。Java编译器将检查import语句中提到的引用,并在很细微的程度上影响您的类的性能。

谢谢

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.