参考:
- 《In ArrayBlockingQueue, why copy final member field into local final variable?》
- 《Performance of locally copied members ?》
JDK源码中经常会出现一种代码模式:将类成员变量复制到方法本地变量上。
如:String.compareTo() 方法中会将类成员变量 value 复制为方法本地变量 v1:
public int compareTo(String anotherString) { byte v1[] = value; byte v2[] = anotherString.value; ... }
我们可从官方邮件列表得知原因:《Performance of locally copied members ?》
It's a coding style made popular by Doug Lea.
It's an extreme optimization that probably isn't necessary;
you can expect the JIT to make the same optimizations.
(you can try to check the machine code yourself!)Nevertheless, copying to locals produces the smallest bytecode, and for low-level code it's nice to write code that's a little closer to the machine.
Also, optimizations of finals (can cache even across volatile reads) could be better. John Rose is working on that.
For some algorithms in j.u.c, copying to a local is necessary for correctness.
即:
这是一种极端的优化方式,而且可能没啥用。你可以期望 JIT 也会执行相同的优化。
将类成员变量复制为方法本地变量可使得生成的字节码更小;也更容易编写靠近机器的底层代码。
在某些算法中(特别是JDK并发包中的算法),复制为本地变量,或使用final变量,对于保证并发正确性很有必要。
所以我们并不需要对这种代码模式过于担心。你做好并发/同步相关正确性编码,保证算法正确性就行,不需要去刻意模仿使用这种代码模式。
(无论是否使用这种代码模式,算法正确性都是需要保证的嘛!)
相关推荐
java毕业设计——基于java的动力节点系统的设计与实现(源码+数据库).zipjava毕业设计——基于java的动力节点系统的设计与实现(源码+数据库).zipjava毕业设计——基于java的动力节点系统的设计与实现(源码+数据库)....
java毕业设计——基于ssm的流浪猫狗救助网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的流浪猫狗救助网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的流浪猫狗救助网站设计与实现(源码+...
java毕业设计——学校管理系统设计与实现(源码+数据库).zip java毕业设计——学校管理系统设计与实现(源码+数据库).zip java毕业设计——学校管理系统设计与实现(源码+数据库).zip java毕业设计——学校管理系统设计...
java毕业设计——基于ssm的汽车租赁网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的汽车租赁网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的汽车租赁网站设计与实现(源码+数据库).zip java...
Java与模式——源码
java毕业设计——基于spring boot的在线选房网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的在线选房网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的在线选房网站设计与...
java毕业设计——基于ssm的兼职论坛设计与实现(源码+数据库).zip java毕业设计——基于ssm的兼职论坛设计与实现(源码+数据库).zip java毕业设计——基于ssm的兼职论坛设计与实现(源码+数据库).zip java毕业设计——...
java毕业设计——基于ssm的民宿网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的民宿网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的民宿网站设计与实现(源码+数据库).zip java毕业设计——...
java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip java毕业...
java毕业设计——基于spring boot的旅游网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的旅游网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的旅游网站设计与实现(源码+...
java毕业设计——基于vue的在线问卷网站设计与实现(源码+数据库).zip java毕业设计——基于vue的在线问卷网站设计与实现(源码+数据库).zip java毕业设计——基于vue的在线问卷网站设计与实现(源码+数据库).zip java...
java毕业设计——基于ssm的房屋租赁系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的房屋租赁系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的房屋租赁系统设计与实现(源码+数据库).zip java...
java毕业设计——基于ssm的教务管理系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的教务管理系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的教务管理系统设计与实现(源码+数据库).zip java...
java毕业设计——基于ssm的酒店管理系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的酒店管理系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的酒店管理系统设计与实现(源码+数据库).zip java...
java毕业设计——基于spring boot的疫情数据查看网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的疫情数据查看网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的疫情数据查看...
java毕业设计——基于spring boot的音乐播放网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的音乐播放网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的音乐播放网站设计与...
java毕业设计——基于spring boot的理财管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的理财管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的理财管理网站设计与...
JAVA项目源码——学生信息管理系统,word文档,祥细代码.
java毕业设计——基于spring boot的在线招标网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的在线招标网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的在线招标网站设计与...
java毕业设计——基于spring boot的桌面聊天室系统设计与实现(源码+数据库).zip java毕业设计——基于spring boot的桌面聊天室系统设计与实现(源码+数据库).zip java毕业设计——基于spring boot的桌面聊天室系统...