当前位置: 首页 > 面试题库 >

将频繁使用的字段分配给局部变量是否更有效?

柯立果
2023-03-14
问题内容

我正在阅读的来源,java.util.HashMap发现table如果该方法中多次使用该值,则几乎总是将字段分配给局部变量。

由于此类已记录为不是线程安全的,并且字段也不是可变的,所以这有什么意义?它会使代码更有效吗?


问题答案:

通过将成员字段放入本地范围(即当前堆栈框架)中,可以为整个方法执行固定引用。因此,每次使用时,您对同一对象都有相同的引用。

无需将其置于本地范围内,对字段的每次访问均通过this引用(隐式或显式)进行。因此,对于每次访问,JVM必须获取该字段的当前值-
从上一次访问开始,理论上该值可能会发生变化。

除了更可靠之外,JIT还可以优化访问,即循环(内联值,无论如何)。

对性能的影响很小,但可以测量。



 类似资料:
  • 问题内容: 这是JDK的类方法。作者为什么将字段分配给局部变量? 上面和下面之间有什么区别?这与线程安全有关吗? 问题答案: 为了稍微扩展一下Michael的答案,我希望它可以确保该方法永不返回,而且还可以提供所提到的性能优势。 给出以下代码: 至少从理论上讲,在多线程代码中,可以将字段设置为第一次读取()和第二次读取之间,然后将其返回。我没有看过其余的代码,但是我假设还有其他可能被分配的地方。对

  • 问题内容: 我正在阅读的源代码,并发现了一些我不理解的代码: 注意这一行: 为什么不直接使用它,而是将其分配给局部变量? 问题答案: 可能是出于 优化 目的吗? 可能可以通过JIT编译器更轻松地将局部变量直接分配给寄存器。 至少在Android中,对于API的第一个版本,访问局部变量比访问实例变量便宜(不能代表较新的版本)。普通的Java可能是相同的,在某些情况下使用本地是有意义的。 实际上,在这

  • 问题内容: 作为Eclipse的长期用户,我正在与IntelliJ IDEA 10一起玩耍。我似乎找不到如何执行“向新局部变量分配语句”代码完成的工作。 功能说明: 我输入类似 然后按+ 并输入,Eclipse将行更改为: 同时,我可以立即键入“ bufferedOutputStream”以将其重命名(或从下拉菜单中选择“ bufferedOutputStream”,“ outputStream”

  • 问题内容: 好的,我知道标题不能完全解释这个问题。因此,我正在编写一个执行大量计算的程序,并尝试对其进行优化,以使其运行不会太慢。我有一个函数,该函数是一个类的成员,该函数被调用约500万次。这是功能: 我想知道在类中声明变量vpPointx和vpPointy是否比每次调用函数时声明它们更好/更快。这将是一个很好的优化还是效果不大? 通常,如果这里有任何可以优化的内容,请告诉我。 问题答案: 通过

  • 问题内容: 我想知道你们是否可以提供帮助。我试图做一个简单的视图,它将用户发送到客户端创建表单,但是我一直收到此错误: 赋值之前引用的局部变量“ form” 查看我的代码,看不到有什么问题。 有人告诉我我哪里出问题了吗? 问题答案: 这是正在发生的事情: 没有输入该块。 变量未定义。 然后,你尝试在语句中引用变量。 至于解决方法,这确实是你要决定的。解决的方法取决于你希望代码执行的操作(如果请求方

  • 问题内容: 我发现能够在运行时创建新变量并创建结果字典以供以后处理(即写入文件)非常有用。 这将创建字典条目[result1:data1],我可以使用myDict [result1]对其进行调用。我一直在使用vars()而不真正了解我在做什么。我认为它返回带有局部变量(?)的字典,并且 vars()[x] = y 创建一个新的[x:y]字典条目? 我有一个脚本,其中传递了一个用{input1:da