未使用的导入和对象是不是会对性能产生影响
Posted
技术标签:
【中文标题】未使用的导入和对象是不是会对性能产生影响【英文标题】:Does unused import and objects have a performance impact未使用的导入和对象是否会对性能产生影响 【发布时间】:2012-02-02 04:30:37 【问题描述】:我有疑问,Java 代码中未使用的导入和未使用的对象是否会对性能产生任何影响?
假设一个对象被初始化并且从未使用过,会发生什么? 未使用的进口商品的成本是多少?
【问题讨论】:
***.com/questions/979057/… 为什么不用EclipseOrganize Imports
函数?
或 IntelliJ 或 NetBeans 或任何体面的 IDE 中的 Organize 导入。
肯定会影响管理代码:)
Any reason to clean up unused imports in Java, other than reducing clutter?的可能重复
【参考方案1】:
虽然对编译的影响很小,但对部署的影响可能很糟糕。我刚刚遇到了一个未使用的导入,它需要一个单独的库,它成为了一个 Maven 依赖项。幸运的是没有发现更进一步的传递依赖问题,但.war
文件无缘无故变厚了。在 webapp 类加载器中添加一个多余的 jar。
【讨论】:
【参考方案2】:尽管 Java 文件中未使用的导入不会造成任何损害,但它会不必要地增加 Java 源文件的长度和大小。
【讨论】:
【参考方案3】:是的,如果我们在 java 类中引用未使用的 import 语句,它会对性能产生一些影响。 Java 编译器将检查 import 语句中提到的引用,并在分钟级别影响您的类的性能。
谢谢
【讨论】:
【参考方案4】:未使用的导入在运行时不会影响性能。它纯粹是一种命名空间机制。尽管如此,您应该始终只导入可读性所需的内容,并避免令人讨厌的命名空间冲突。
除了代码可读性和代码的可维护性之外,通过整理导入可能会更快地编译 java 代码(然而,不明显),但运行时性能不会受到影响,因为生成的字节码不会受到不整洁的导入的影响。生成的字节码保持不变。
【讨论】:
请提供unused imports have no performance impact
的参考
更准确地说,在运行时没有性能影响。但是,根据导入的数量,编译可能会更慢但不明显。
为什么不引人注意?当然,这取决于你正在做多少编译?例如——我们有一个持续编译多个项目的 CI 构建服务器——因此即使是最小的优化也应该稍微提高编译性能,对吧?
如果某件事情比平时多花一天时间,你会注意到它……假设它通常需要不到几天的时间。如果通常需要一年呢?你不会注意到它,因为它只是那个量级的噪音。除了 0.274% 的性能提升之外,还有更多值得关注的事情。如果你真的需要一点点的增加,投入更好的硬件或改进编译器,那么你将获得比零花钱更多的东西。
@SantiBailors “一整天”是什么?那一天是由电脑度过的,而不是你。计算机无法修复错误(除非编程为?),否则将不需要您。在 1000 次迭代循环中获得 1/1000 的变化仍然只是 1/1000 的增益,我不明白你的意思。如果有人想为这么小的收益付钱给你,那对你来说很好,否则就是浪费时间。【参考方案5】:
这是一个非常常见的问题。
与大多数性能问题一样,最好的方法是尽可能编写最清晰、最简单的代码,因为这样可以提高代码的可维护性,并有助于确保代码在更改后仍能正常运行。 (聪明的/钝的/不必要的冗长代码一开始可以运行得很快,但因为它被凡人改变它可能会变得更慢)
未使用的导入对编译器的影响很小,但在字节码或运行时没有导入。
未使用的对象可以被优化掉,但最好避免这些,因为它们几乎总是会造成一些性能影响,但更重要的是会使阅读和维护代码更加困难。
【讨论】:
我们还可以在编译过程中提到一些额外的 CPU 滴答声。更多代码 - 优化和编译需要更多时间 感谢您的回答!你有我可以参考的这个信息的来源吗? (除了这个答案......) @EduardoBezerra 您可以从 byte cide 规范中看到未使用导入,因此它们可以在运行时产生影响。以上是关于未使用的导入和对象是不是会对性能产生影响的主要内容,如果未能解决你的问题,请参考以下文章
为啥drawRect的空实现:会对动画期间的性能产生不利影响