Компиляция Java JIT может оптимизировать метод, когда он всегда возвращает одно и то же значение? - PullRequest
0 голосов
/ 18 сентября 2018

В моем Java-приложении у меня есть несколько методов, которые всегда возвращают одно и то же.Итак, может ли JIT обнаружить эти методы и оптимизировать производительность (клонировать результат вместо того, чтобы рассчитать его или иным способом)?

Пример метода-кандидата для оптимизации:

private List<String> get() {
    return Arrays.asList(Operation.values()).stream().map(Object::toString).collect(Collectors.toList());
}

Inс моей точки зрения это невозможно, но я не уверен.

1 Ответ

0 голосов
/ 19 сентября 2018

Устранение общих подвыражений (CSE) - это хорошо известная оптимизация компилятора, позволяющая избежать пересчета идентичных выражений.В общем, JVM способна на такую ​​оптимизацию.

Но это не ваш случай.Данный get() метод не возвращает одно и то же.

Прежде всего, предполагая, что Operation имеет тип enum, Operation.values() каждый раз возвращает новый массив.Он должен возвращать новый объект для защиты исходного массива от модификации.

Collectors.toList() в его текущей реализации также каждый раз возвращает новый ArrayList.JVM ничего не может сделать с этим распределением, поскольку возвращаемый объект виден снаружи.

...