Java JIT编译可以在返回总是相同的值时优化方法吗?

问题描述 投票:1回答:1

在我的Java应用程序中,我有一些方法总是返回相同的东西。那么,JIT是否能够检测这些方法并优化性能(克隆结果而不是计算或以其他方式计算)?

优化的候选方法示例:

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

在我看来,这是不可能的,但我不确定。

java performance jit
1个回答
3
投票

Common subexpression elimination(CSE)是一个众所周知的编译器优化,以避免重新计算相同的表达式。通常,JVM能够进行这样的优化。

但这不是你的情况。给定的get()方法不会返回相同的内容。

首先,假设Operation是枚举类型,Operation.values()每次返回新数组。它必须返回一个新对象以保护原始数组不被修改。

Collectors.toList()目前的实施也每次都会返回一个新的ArrayList。 JVM无法对此分配执行任何操作,因为返回的对象在外部可见。

© www.soinside.com 2019 - 2024. All rights reserved.