参考:
- 《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毕业设计——基于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毕业设计——基于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毕业设计——基于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毕业设计——基于ssm-vue的段子发布平台系统设计与实现(源码+数据库).zip java毕业设计——基于ssm-vue的段子发布平台系统设计与实现(源码+数据库).zip java毕业设计——基于ssm-vue的段子发布平台系统设计与...
java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源代码).zip java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源代码).zip java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源...
Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...
java课程设计——java游戏开发入门,飞机大战游戏源码程序 java课程设计——java游戏开发入门,飞机大战游戏源码程序 java课程设计——java游戏开发入门,飞机大战游戏源码程序 java课程设计——java游戏开发入门...
java毕业设计——高校固定资产管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——高校固定资产管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——高校固定资产管理系统的...
Iphone开发系列源码——公交线路查询项目完整源码Iphone开发系列源码——公交线路查询项目完整源码Iphone开发系列源码——公交线路查询项目完整源码Iphone开发系列源码——公交线路查询项目完整源码Iphone开发系列...
java毕业设计——线上医院挂号系统源码+数据库.zipjava毕业设计——线上医院挂号系统源码+数据库.zipjava毕业设计——线上医院挂号系统源码+数据库.zipjava毕业设计——线上医院挂号系统源码+数据库.zipjava毕业设计...
java毕业设计——驾校预约管理系统源码+数据库.zipjava毕业设计——驾校预约管理系统源码+数据库.zipjava毕业设计——驾校预约管理系统源码+数据库.zipjava毕业设计——驾校预约管理系统源码+数据库.zipjava毕业设计...