假设我有一个非常紧凑的内循环,每次迭代访问并改变一个簿记对象,该对象存储一些关于算法的简单数据,并具有操作它的简单逻辑
簿记对象是私有和最终的,它的所有方法都是私有的,最终的和@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
和end
视为局部变量,并将nextChunk代码直接内联到frobnicate
吗?
答案 0 :(得分:3)
在Java中,它可以在您拥有的情境中内联字段和方法。它并没有完全消除Object,而是接近它。我认为Scala的工作方式类似。