java - Java中接口(interface)调用的优化策略

标签 java performance optimization interface design-patterns

我有一个使用提供者模式的应用程序。应用程序通过调用应用程序定义的接口(interface)来利用提供程序实现。

我目前正在研究围绕接口(interface)调用优化应用程序的方法。

我可以将应用程序的复杂性限制为以下内容:

  1. 我只需要在启动时动态加载一次实现
  2. 在任何时候,我只需要为应用程序实例的一组特定接口(interface)提供一个提供程序实现。

我很感激人们付诸实践的任何策略:

  1. 减少接口(interface)调用
  2. 直接调用接口(interface)实现类的任何技巧。
  3. 更好地利用编译器优化的各种方法。

谢谢!

最佳答案

一些误解值得在这里解决。

  1. 您可以通过直接调用底层具体实现(或使用抽象类)来减少接口(interface)调用。当可以简化设计并提高可维护性时,您应该这样做(通常更多接口(interface)会有所帮助,但是并不总是)

  2. 您可以将接口(interface)引用转换为具体引用并使用它。这通常是不好的编程实践,对性能影响很小。一般来说,只有当正确重构的工作量大于其值(value)时,您才会这样做。 (这不是一种好的设计方法,但可以是一种实用的方法)

  3. 编译器不会以任何重要方式优化代码。它所做的一些优化(例如内联编译时常量)您可能不需要。 JVM 在运行时进行有用的优化。再次猜测 JVM 将做什么并尝试优化代码是一个试错过程。如果你尝试 10 件你认为应该有帮助的事情,1 件会让速度明显加快,6 件几乎没有什么区别,3 件会让速度变慢。即简单的代码往往是最佳优化的。

与 C++ 不同,大多数 JVM 可以优化虚拟函数的成本,尤其是在实际仅使用一两个实现时。即它可以根据代码的使用方式而不是编译器可以静态确定的内容来优化代码。

关于java - Java中接口(interface)调用的优化策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451775/

相关文章:

javascript - 使用变量的正确方法 - 在函数循环内部或外部

php - PHP 和 MySQL 中唯一访问次数的有效计数器

java单线程慢

ios - 需要优化IOS平台上的网络利用率。有引用吗?

Python:内存泄漏?

java - 如何生成与从 JVisualVM 获得的线程转储类似的线程转储?

java - @Transactional 的动态事务隔离级别

java - 如何写入不同包中的xml文件

c - 将字符串转换为整数的最小方法(反之亦然)

java - instanceof 与 isAnX()