3

非常にタイトな内部ループがあるとします。各反復は、アルゴリズムに関するいくつかの単純なデータを格納し、それを操作するための単純なロジックを持つ単一の簿記オブジェクトにアクセスして変更します。

ブックキーピング オブジェクトは非公開かつ最終的であり、そのすべてのメソッドは非公開、最終、および @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 に答える