`

【Java源码解读——释疑】为什么将类成员变量复制为方法本地变量

 
阅读更多

参考:

 

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的教务管理系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的教务管理系统设计与实现(源码+数据库).zip java...

    java毕业设计——基于spring boot的疫情数据查看网站设计与实现(源码+数据库).zip

    java毕业设计——基于spring boot的疫情数据查看网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的疫情数据查看网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的疫情数据查看...

    java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip

    java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的就业信息管理...

    Iphone开发系列源码——Iphone主题源码

    Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码...

    java课程设计-游戏开发,基于java实现的斗地主单机游戏源码

    java课程设计——游戏开发,基于java实现的斗地主单机游戏源码 ...java课程设计——游戏开发,基于java实现的斗地主单机游戏源码java课程设计——游戏开发,基于java实现的斗地主单机游戏源码java课程设计——游戏开发

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    java课程设计-java游戏开发入门,飞机大战游戏源码程序

    java课程设计——java游戏开发入门,飞机大战游戏源码程序 java课程设计——java游戏开发入门,飞机大战游戏源码程序 java课程设计——java游戏开发入门,飞机大战游戏源码程序 java课程设计——java游戏开发入门...

    Iphone开发系列源码——iPhone版Wordpress源代码

    Iphone开发系列源码——iPhone版Wordpress源代码Iphone开发系列源码——iPhone版Wordpress源代码Iphone开发系列源码——iPhone版Wordpress源代码Iphone开发系列源码——iPhone版Wordpress源代码Iphone开发系列源码...

    Python基于Django的实战项目源码——美多商城.zip

    Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的...

    Python源码剖析——深度探索动态语言核心技术

    资源名称:Python源码剖析——深度探索动态语言核心技术资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    java毕业设计-线上医院挂号系统源码+数据库.zip

    java毕业设计——线上医院挂号系统源码+数据库.zipjava毕业设计——线上医院挂号系统源码+数据库.zipjava毕业设计——线上医院挂号系统源码+数据库.zipjava毕业设计——线上医院挂号系统源码+数据库.zipjava毕业设计...

    java毕业设计-驾校预约管理系统源码+数据库.zip

    java毕业设计——驾校预约管理系统源码+数据库.zipjava毕业设计——驾校预约管理系统源码+数据库.zipjava毕业设计——驾校预约管理系统源码+数据库.zipjava毕业设计——驾校预约管理系统源码+数据库.zipjava毕业设计...

    安卓app开发项目-实用源码——Android屏幕锁源码(源码).zip

    安卓app开发项目-实用源码——Android屏幕锁源码(源码).zip安卓app开发项目-实用源码——Android屏幕锁源码(源码).zip安卓app开发项目-实用源码——Android屏幕锁源码(源码).zip安卓app开发项目-实用源码——Android...

    JAVA毕业设计-高性能IM即时通信系统源码+java开发文档.zip

    JAVA毕业设计——高性能IM即时通信系统源码+java开发文档.zipJAVA毕业设计——高性能IM即时通信系统源码+java开发文档.zipJAVA毕业设计——高性能IM即时通信系统源码+java开发文档.zipJAVA毕业设计——高性能IM即时...

    java毕业设计-基于springboot的ERP系统源码+数据库.zip

    java毕业设计——基于springboot的ERP系统源码+数据库.zipjava毕业设计——基于springboot的ERP系统源码+数据库.zipjava毕业设计——基于springboot的ERP系统源码+数据库.zipjava毕业设计——基于springboot的ERP...

    java毕业设计-基于Springboot的招聘系统源码+数据库.zip

    java毕业设计——基于Springboot的招聘系统源码+数据库.zipjava毕业设计——基于Springboot的招聘系统源码+数据库.zipjava毕业设计——基于Springboot的招聘系统源码+数据库.zipjava毕业设计——基于Springboot的...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    Java图书馆管理系统源码

    Java课程设计——SpringBoot图书馆管理系统(前后端源码+数据库+文档).zip,已调试好可直接运行 Java图书馆管理系统源码 Java课程设计——SpringBoot图书馆管理系统(前后端源码+数据库+文档).zip,已调试好可直接...

    Iphone开发系列源码——图表和报表的统计功能

    Iphone开发系列源码——图表和报表的统计功能Iphone开发系列源码——图表和报表的统计功能Iphone开发系列源码——图表和报表的统计功能Iphone开发系列源码——图表和报表的统计功能Iphone开发系列源码——图表和报表...

Global site tag (gtag.js) - Google Analytics