【问题标题】:autoboxing and performance自动装箱和性能
【发布时间】:2010-09-19 10:37:57
【问题描述】:

我有一个执行数十万次计算的应用程序。目前我们所有的价值观都是双打。我使用 JFormula 引擎进行大部分计算,并且注意到 api 采用双参数,因此当我传入双精度时会发生一些自动装箱。我已经阅读了一些文章,并创建了一些简单的测试,并且确实注意到性能受到影响,但我仍在试图找出通过我的代码并修复它所花费的时间,这将值得任何性能改进。我想知道是否有其他人有过类似的经验并通过使用原语获得性能提升?

【问题讨论】:

  • 您是否对代码进行了分析以查看自动装箱是否存在问题?
  • 不,今天我在查看代码时才发现这个问题。这就是我要追求的下一步。我只是想获得一些额外的反馈。谢谢,
  • 你写了多少代码?即使在一个体面大小的应用程序中,我也可以在你发布这个问题的时间内从使用 Double 切换到 double !与(几乎)任何优化一样,分析是唯一能告诉您命中大小(如果有的话)的东西。

标签: java


【解决方案1】:

对于科学计算或其他对性能敏感的数字代码,不适合使用自动装箱和拆箱。 -- Sun FAQ

【讨论】:

  • 我不相信这对他来说是个问题。他只是使用包装器将值送到前门。从 JFormula 开始,我会假设它们是原语或 BigDecimals。
【解决方案2】:

以及其他建议(很好 - 分析和基准测试非常重要)我想说,如果 JFormula 在每个方法调用中都做了任何重要的事情,那么制作时的装箱/拆箱这个电话很可能是微不足道的。特别是拆箱速度很快,因为它不需要任何内存分配 - 真的只是从框中复制现有值。

简而言之:当然要进行测试,但我不期望这个命中很重要。

【讨论】:

    【解决方案3】:

    您可以尝试使用和不使用自动装箱进行简单的基准测试。通过时间分析器运行它们(推荐使用visualvm)。找到时间差并将其缩放到您的程序中,以找到您程序中的大致时间

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多