【问题标题】:Does unused import and objects have a performance impact未使用的导入和对象是否会对性能产生影响
【发布时间】:2012-02-02 04:30:37
【问题描述】:

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

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

【问题讨论】:

标签: java import package bytecode


【解决方案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 规范中看到未使用导入,因此它们可以在运行时产生影响。
        猜你喜欢
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多