首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用静态全局变量还是内联变量--哪个更有效?

使用静态全局变量还是内联变量--哪个更有效?
EN

Stack Overflow用户
提问于 2018-08-22 08:04:35
回答 1查看 50关注 0票数 0

我有一个关于JIT的问题(这是应该解决的问题吗?)

例如,我有一个简单的数学任务要做,我不知道哪一个更好的方式来编程:

代码语言:javascript
复制
public class Spielwiese {

    static final BigDecimal STATIC_VALUE = new BigDecimal( "5" );

    public static BigDecimal doSomeCalculation1(BigDecimal bd) {
        return new BigDecimal("5").multiply( bd );
    }

    public static BigDecimal doSomeCalculation2(BigDecimal bd) {
        return STATIC_VALUE.multiply( bd );
    }
}

运行中的java程序会看到新的doSomeCalculation1(...) (“5”)指令实际上可以被静态用法所替代吗?-这可能会使BigDecimal更易读。

如果没有,还会有什么其他原因重复一次又一次地实例化相同/等价物?

你个人是怎么做到的?

我的问题还能从哪里得到答案呢?

EN

回答 1

Stack Overflow用户

发布于 2018-08-23 11:33:48

这不是真正的JIT问题。代码的两个版本之间的区别实际上是关于缓存的。

  • 在一个版本中,从长远来看,您将消耗更多的空间,因为STATIC_VALUESpielwiese类的生命周期内是可访问的:可能是应用程序。
  • 在另一个版本中,您在每次调用方法时构造并丢弃一个额外的BigDecimal对象。

无论JIT编译如何,情况都是如此。

我会怎么做?

首先,除非我的直觉告诉我性能可能很重要,否则我可能会对可读性进行优化。从程序员生产力的角度来看,这种微观优化很少是值得的。

如果我需要对经常调用该方法的情况进行优化,STATIC_VALUE方法可能会更快一些。对static变量的引用是单个字节码,很可能会转换为单个机器指令。(也许是两个)。构造一个新的BigDecimal值将需要更多的数量级指令。

如果我需要为内存的使用进行优化,那么更好的方法是值得商榷的。然而,这两种方法之间的差别很可能很小,很难实际衡量。

我的问题还能从哪里得到答案呢?

你可以自己回答:

  • 通过创建基准和度量,或者
  • 通过使用JVM选项输出JIT编译的代码.分析密码。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51962362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档