JVM 是否会内联对象的实例变量和方法?

2024-05-05

假设我有一个非常紧密的内部循环,每次迭代都会访问和改变一个簿记对象,该对象存储有关算法的一些简单数据,并具有用于操作它的简单逻辑

簿记对象是私有的和最终的,并且它的所有方法都是私有的、最终的和@inline。下面是一个示例(Scala 语法):

object Frobnicate {
  private class DataRemaining(val start: Int, val end: Int) {
    @inline private def nextChunk = ....
  }

  def frobnicate {
    // ...
    val bookkeeper = new DataRemaining(0, 1000)
    while( bookeeper.hasData ) {
      val data = bookkeeper.nextChunk
      // ......
    }
  }
 }

JVM 是否会将整个 DataRemaining 对象内联到Frobnicate.frobnicate?也就是说,它会治疗start and end作为局部变量并将 nextChunk 代码直接内联到frobnicate?


在 Java 中,它可以在您所遇到的情况下内联字段和方法。它并没有完全消除对象,但已经接近了。我认为 Scala 也会以类似的方式工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM 是否会内联对象的实例变量和方法? 的相关文章

随机推荐