3

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

bookkeeping 对象是 private 和 final 的,它的所有方法都是 private、final 和 @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? 也就是说,它会将startandend视为局部变量并将 nextChunk 代码直接内联到frobnicate?

4

1 回答 1

3

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

于 2011-06-02T13:28:26.040 回答