方法内直接引用全局变量和通过声明局部变量来引用全局变量的到底有没区别?

看源码时相信看到过这个片段:

声明局部变量再指向类的变量。为什么不直接引用呢?当时就想:

java的内存模型中,方法只会存放对象的引用(this),不会存放对象中的信息,都是通过this访问对象中的信息。

所有 直接引用 this.lock 就要先去访问this对象,然后获取lock的引用,最后再调用lock函数。如果采用框框中的吗,

将对象赋值给局部变量在使用。之后就是不是不再访问this了?

直接看字节码:

	final ReentrantLock lock = new ReentrantLock();

	public void b(){
		ReentrantLock lock = this.lock;
		lock.lock();
		lock.unlock();
	}

	public void c(){
		this.lock.lock();
		this.lock.unlock();
	}

对比发现:确实C方法每次调用lock函数都需要 GETFIELD 而 b方法只get了一次。由此可以得出将字段赋值给局部变量真的能够节省时间吗??。由于只能看到字节码的层次,无法知道jvm 是否做了什么优化。还不能下结论。。后续有知道的可以贴个地址。

 

相关推荐
©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页