Там это некоторые накладные расходы с косвенностью, но их трудно измерить. Ориентир OP занял около 4 нс на итерацию, в то время как мне требуется около 1 нс (для самого быстрого эксперимента). Это означает, что они измеряли главным образом накладные расходы ArrayList
, Iterator
и cycle
, вероятно, вместе с накладными расходами на виртуальные вызовы.
Накладные расходы, которые необходимо измерить, настолько малы, что вам нужно использовать массивы и либо добавить внутренний цикл, либо использовать маскировку для доступа к ним.
results из моего benchmark показывают, что есть накладные расходы на использование как интерфейса, так и косвенного. Эти накладные расходы колеблются от 20% до 50%, что очень похоже. Однако важная часть составляет 20-50% того, что. Это часть специально созданного теста, ничего не делающего, кроме осуществления кода. В любом реалистичном фрагменте кода относительные накладные расходы будут в десять, сотни или тысячи раз ниже.
Итак, если вы не разрабатываете высокоэффективную библиотеку, выполняющую очень простые и быстрые операции, просто забудьте ее. Используйте косвенную ориентацию и интерфейсы по своему усмотрению и сконцентрируйтесь на хорошем дизайне. Даже если производительность важна, возможно, есть другие места, где вы можете получить больше.
Это будет зависеть от вида завертывания. – Raedwald