非常にタイトな内部ループがあるとします。各反復は、アルゴリズムに関するいくつかの単純なデータを格納し、それを操作するための単純なロジックを持つ単一の簿記オブジェクトにアクセスして変更します。
ブックキーピング オブジェクトは非公開かつ最終的であり、そのすべてのメソッドは非公開、最終、および @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
andend
をローカル変数として扱い、 nextChunk コードを に直接インライン化しfrobnicate
ますか?