Как JVM оптимизирует свободный API - PullRequest
0 голосов
/ 06 февраля 2019

Может ли JVM оптимизировать этот код

Как этот код оптимизируется в компиляторе Java или JVM, я прошу специально для оптимизации, если этот код был написан java

Stream.of(1, 2, 3)
      .map(i -> i + 1)
      .map(i -> i + 1)
      .map(i -> i + 1);

к чему-то вроде

Stream.of(1, 2, 3)
      .map(i -> i + 3)

или быть еще более агрессивным и заменить его базовым циклом for, который может улучшить производительность.

В clojure есть концепцияпреобразователя, который является своего рода оптимизацией, которую вы можете сделать, чтобы объединить сокращаемые функции в одну функцию и устранить издержки ленивого распространения.Может ли JVM преобразовать некоторые функции в свободный API?

Например, если бы у нас был интерфейс декоратора для потоков Java

decor-map(decor-map(base-map (i -> i + 1), i -> i +1), i -> i + 1)

, тогда я предполагаю, что компиляция может каким-то образом попытаться преобразовать декораторкарты.Но как это возможно в беглом API?

1 Ответ

0 голосов
/ 06 февраля 2019

Javac действительно мало оптимизирует, насколько мне известно, он действительно только делает постоянное свертывание .

Другими словами: все сложные варианты оптимизации, которые есть во многих других языках, напримерпоскольку C ++ напрямую применяется при компиляции исходного кода в машинный код ... javac ничего этого не делает.

Почему: потому что это происходит (где это имеет смысл) во время выполнения, с помощью JIT.

Вывод: вы не беспокоитесь о производительности для кода Java на стороне "исходного кода"вещи".Вы пытаетесь написать простой простой код с короткими методами, чтобы JIT мог сделать это волшебно и встроить все это, и превратить его в машинный код, оптимизированный для поддержки ваших фактических шаблонов использования.

...