Проблема не связана с встраиванием, она связана с боксом / распаковкой из Char
с, который имеет место при использовании foldLeft
.
Вы получаете foldLeft
на String
путем неявного преобразования в StringOps
, которое не является специализированным.Каждый char
в строке должен быть упакован в java.lang.Character
, чтобы быть переданным в Function2
(аргумент foldLeft
), затем распакован (намного дешевле) для передачи в метод value
втело функции, , затем снова упакованное для подачи в следующую итерацию сгиба.
Бокс включает в себя накладные расходы на создание объектов и последующий сбор мусора.
С точки зрения избежания бокса, следует краткое и важное замечание:
- вам не следует пытаться избегать бокса с вероятностью почти 1.
(То есть, если вы не определили специфическое и недопустимое снижение производительности , которое может быть связано с боксом, вам не стоит об этом беспокоиться.)
Если вы уверены, что существует проблема, которую вам необходимо решить, избегайте коллекций и for
-пониманий (которые используют foreach
и flatMap
под капотом).Если вы используете цикл, используйте while
.