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

时间:2011-06-02 13:25:42

标签: java scala jvm jit jvm-hotspot

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

簿记对象是私有和最终的,它的所有方法都是私有的,最终的和@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?也就是说,它会将startend视为局部变量,并将nextChunk代码直接内联到frobnicate吗?

1 个答案:

答案 0 :(得分:3)

在Java中,它可以在您拥有的情境中内联字段和方法。它并没有完全消除Object,而是接近它。我认为Scala的工作方式类似。