invokevirtual 是否会破坏 Java 上的标量替换?

问题描述

我希望重构我的应用程序以允许转义分析和标量替换为一个经常分配的特定对象启动。
我假设我不会在 JVM 中达到任何内联限制,因为我可以在需要时进行调整(完全内联是标量替换工作的需要之一)

假设一个基本的代码流是这样的:

public class DataHandler {
// IHandler is an interface of which there are 4 different implementations at runtime
  private IHandler handler; // child handler - implementation

  public void handleData(SomeData data) {
    HeavyObjectIWantToScalarReplace obj = new HeavyObjectIWantToScalarReplace(data);
    handler.handle(obj)
  }
}

使用对象调用虚拟方法是否足以破坏最新的 OpenJDK 或 OpenJ9 的标量替换? 如果是这样,在避免 invokevirtual 的同时,可以使用什么解决方案最接近当前的 OOP 方法
也许 invokevirtual 可以通过 JIT 优化掉,这足以确保 没有 这 4 个处理程序类“泄漏”对 HeavyObjectIWantToScalarReplace 的引用?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)