我有一个使用提供者模式的应用程序。应用程序通过调用应用程序定义的接口来利用提供程序实现。
我正在研究如何围绕接口调用优化我的应用程序。
我可以将应用程序的复杂性限制为以下内容:
我很感激人们付诸实践的任何策略:
谢谢!
答案 0 :(得分:3)
这里有一些错误观念值得解决。
您可以通过直接调用底层具体实现(或使用抽象类)来减少接口调用。当它简化设计并提高可维护性时,应该这样做(通常更多接口有帮助,但是并非总是如此)
您可以将接口引用强制转换为具体引用,然后使用它。这通常是糟糕的编程实践,对性能影响不大。一般来说,只有正确地进行重构才能实现这一目标。 (它不是一个好的设计方法,但可以是一个务实的方法)
编译器不会以任何重要方式优化代码。它可以做的少数优化(例如内联编译时常量),你可能没有。 JVM在运行时执行有用的优化。再猜测JVM将做什么并尝试优化代码是一个跟踪和错误过程。如果你尝试了10个你认为应该有帮助的东西,1会使它显着加快,6会产生很小的差异,3会使它变慢。即简单代码往往最佳优化。
与C ++不同,大多数JVM可以优化虚拟功能的成本,尤其是当实际使用的实现只有一两个时。即它可以根据代码的使用方式优化代码,而不是编译器可以静态确定的代码。
答案 1 :(得分:1)
听到它的声音,你做错了。
精心设计的界面可以减少而不会增加应用程序的复杂性。通常与提供程序一起使用的接口应该有助于区分系统。如果您觉得直接访问实现会更简单,那么您的接口可能需要重新设计。
“接口调用”的运行时开销非常小,以至于您不可能处于工作系统和非工作系统之间的区别。
一般来说,Java编译器本身的优化很少。它的大部分发生在运行时,因此代码越“自然”,JIT编译器就越能处理它。如果您尝试使用技巧来强制进行此优化或(例如手动内联代码或重用变量),则可能会导致代码速度变慢。
总结一下;如果您想降低应用程序的复杂性,请确保您的模块在应有的位置分开(模块之间的依赖关系越少越好),并使用代码分析工具来跟踪复杂性指标。