Java在循环中使用getter还是创建局部变量?

stonar96

我有一个运行4096次的for循环,它应该尽可能快。在这里,性能真的很重要。目前,我在循环内部使用getter方法,这些方法仅从循环过程中不更改的字段中返回值或对象。

例子:

for (;;) {
    doSomething(example.getValue());
}

使用吸气剂会产生任何开销吗?使用以下方法是否更快?

例子:

Object object = example.getValue();
for (;;) {
    doSomething(object);
}

如果是的话,访问诸如这样的公共字段也适用example.value吗?

编辑:我不在System.out.println()循环内使用

编辑:有些字段不是final没有字段volatile,没有方法(getter)是synchronized

语言学家

正如Rogério回答的那样,在循环(Object object = example.getValue();之外获取对象引用可能比在循环内调用getter更快(或至少永远不会更慢),因为

  • 在“最坏”的情况下,example.getValue()尽管应该假设吸气方法“微不足道”,但实际上可能会在后台执行一些非常昂贵的计算通过一次分配引用并重新使用它,您只需执行一次昂贵的计算。
  • 在“最佳”情况下,example.getValue()执行一些琐碎的事情,例如return value;在JIT编译器内联代码之后,在循环内分配它不会比在循环外花费更多

但是,更重要的是两者之间的语义差异及其在多线程环境中可能产生的影响:如果对象的状态example发生变化,导致example.getValue()返回对不同对象的引用,则可能在每次迭代中,该方法doSomething(Object object)实际上将Object通过直接调用在的不同实例上进行操作doSomething(example.getValue());在另一方面,通过调用循环外的吸气剂,并设置为返回的实例(基准Object object = example.getValue();),doSomething(object);将操作的信息object Ñ为倍Ñ迭代。

语义上的这种差异可能导致多线程环境中的行为与单线程环境中的行为发生根本不同。此外,这不一定是实际的“内存中”多线程问题:如果example.getValue()依赖于例如数据库/ HDD /网络资源,则此数据可能在循环执行期间发生更改,从而有可能使用其他对象即使Java应用程序本身是单线程的,也返回。出于这个原因,最好考虑使用循环实际要完成的工作,然后选择最能反映预期行为的选项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在while循环中使用最终局部变量时出现不同的编译错误

来自分类Dev

如何在循环中使用 Func 或 Action 而不是局部变量?

来自分类Dev

Java:使用局部变量还是实例变量?

来自分类Dev

在循环中使用 getter setter 变量

来自分类Dev

重用类级别变量还是创建新的局部变量?

来自分类Dev

使用局部变量为循环中的元素设置onclick方法,而无需立即激活它

来自分类Dev

在foreach循环中出现“使用未分配的局部变量”错误,并返回收益

来自分类Dev

增强的for循环中局部变量的范围

来自分类Dev

函数中的局部变量将在循环中多次运行

来自分类Dev

锈期货::选择循环中修改局部变量

来自分类Dev

函数中的局部变量将在循环中多次运行

来自分类Dev

增强的for循环中局部变量的范围

来自分类Dev

Python - UnboundLocalError:在循环中赋值之前引用的局部变量

来自分类Dev

在actionlistener中使用非局部变量

来自分类Dev

Java:哪个更快?局部变量还是访问封装?

来自分类Dev

难道Java编译器优化创建循环的局部变量?

来自分类Dev

JS for循环中的局部变量到全局变量,循环结束后更改值

来自分类Dev

是局部变量还是全局变量?

来自分类Dev

全局声明变量还是局部变量?

来自分类Dev

SQL:在循环中使用变量来创建新表

来自分类Dev

SQL:在循环中使用变量来创建新表

来自分类Dev

使用foreach循环时使用未分配的局部变量

来自分类Dev

如何使局部变量在Java中的循环外可访问

来自分类Dev

永远不要使用局部变量foreach循环警告

来自分类Dev

如何使用Plotly绘制循环的局部变量

来自分类Dev

是否可以在特质实现中使用局部变量?

来自分类Dev

是否可以在Node中使用“线程”局部变量?

来自分类Dev

在条目标签中使用统计局部变量?

来自分类Dev

node.js在导入中使用局部变量

Related 相关文章

  1. 1

    在while循环中使用最终局部变量时出现不同的编译错误

  2. 2

    如何在循环中使用 Func 或 Action 而不是局部变量?

  3. 3

    Java:使用局部变量还是实例变量?

  4. 4

    在循环中使用 getter setter 变量

  5. 5

    重用类级别变量还是创建新的局部变量?

  6. 6

    使用局部变量为循环中的元素设置onclick方法,而无需立即激活它

  7. 7

    在foreach循环中出现“使用未分配的局部变量”错误,并返回收益

  8. 8

    增强的for循环中局部变量的范围

  9. 9

    函数中的局部变量将在循环中多次运行

  10. 10

    锈期货::选择循环中修改局部变量

  11. 11

    函数中的局部变量将在循环中多次运行

  12. 12

    增强的for循环中局部变量的范围

  13. 13

    Python - UnboundLocalError:在循环中赋值之前引用的局部变量

  14. 14

    在actionlistener中使用非局部变量

  15. 15

    Java:哪个更快?局部变量还是访问封装?

  16. 16

    难道Java编译器优化创建循环的局部变量?

  17. 17

    JS for循环中的局部变量到全局变量,循环结束后更改值

  18. 18

    是局部变量还是全局变量?

  19. 19

    全局声明变量还是局部变量?

  20. 20

    SQL:在循环中使用变量来创建新表

  21. 21

    SQL:在循环中使用变量来创建新表

  22. 22

    使用foreach循环时使用未分配的局部变量

  23. 23

    如何使局部变量在Java中的循环外可访问

  24. 24

    永远不要使用局部变量foreach循环警告

  25. 25

    如何使用Plotly绘制循环的局部变量

  26. 26

    是否可以在特质实现中使用局部变量?

  27. 27

    是否可以在Node中使用“线程”局部变量?

  28. 28

    在条目标签中使用统计局部变量?

  29. 29

    node.js在导入中使用局部变量

热门标签

归档