【问题标题】:Performance penalty if going through Java base class?如果通过 Java 基类,性能会下降吗?
【发布时间】:2021-04-20 11:32:56
【问题描述】:

我想使用一个Collection,它的类型在编译时是已知的(ArrayList)。通过父类接口是否有任何惩罚?

Collection<Integer> v = new ArrayList<>();
v.add(42);

ArrayList<Integer> v = new ArrayList<>();
v.add(42);

在 C++ 中,第一种情况会导致虚函数调用,但不会导致第二种情况。 Java中也一样吗?

【问题讨论】:

    标签: java performance


    【解决方案1】:

    Java 对所有方法调用都使用动态绑定,因此没有区别(如果您愿意,它们同样糟糕,但需要注意的是 JIT 优化可能会使它们同样好)。

    【讨论】:

      【解决方案2】:

      不,没有惩罚。您的 ArrayList 是完全相同的对象,具有完全相同的类型。事实上,将其称为 Collection 是一种很好的面向对象的做法,因为您是通过其协定而不是实现来引用该对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-05
        • 2018-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        相关资源
        最近更新 更多