通过实例变量的Java本地引用
在浏览Stage的libgdx源代码时,我遇到了这样一段:
public void draw () {
Camera camera = viewport.getCamera();
camera.update();
if (!root.isVisible()) return;
Batch batch = this.batch;
if (batch != null) {
batch.setProjectionMatrix(camera.combined);
batch.begin();
root.draw(batch, 1);
batch.end();
}
if (debug) drawDebug();
}
(在GitHub上的链接)
我感兴趣的是这一行: Batch batch = this.batch;
我的第一个猜测是一些缓存改进。 我是对的,还是有其他原因避免直接使用实例变量?
在Java早期,这是imho有时用作优化,以避免访问成员变量。 但是现在我相信,热点可以优于人类。
然而,在这种情况下,它可能被用来防止在该变量的并发修改的情况下出现问题,因为可能需要在同一个实例上调用begin()
和end()
。
这是一段有趣的代码。
一种可能性是确保批处理方法的每个调用都是针对同一个对象的。 如果其他代码在另一个线程上修改this.batch,则一个可能的结果是,某些方法调用将成为Batch对象的一个实例,而其余的调用将转到另一个Batch对象实例。
另一种可能性是,一些程序员从其他语言中提取想法和样式(在这种情况下,您必须使用标识符(如“self”)来访问当前实例),在这种情况下,他们可能一直试图避免输入反复批量。
不知道更多关于代码示例,我只能猜测。
链接地址: http://www.djcxy.com/p/24667.html