首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >现代JVM是否优化了简单的内联匿名类分配?

现代JVM是否优化了简单的内联匿名类分配?
EN

Stack Overflow用户
提问于 2011-05-24 19:27:54
回答 4查看 677关注 0票数 9

我今天收到了一个代码评审评论,将这个匿名类提取到一个字段中,以避免一次又一次地分配它:

代码语言:javascript
运行
复制
Collections.transform(new Function<Foo, Bar>(){
  Bar apply(Foo foo) {
    // do some simple local transform of foo into a Bar.
  }
});

我回答说“没关系,JVM优化了它”。虽然我知道这种“优化”不会以任何方式影响性能,而且我认为让代码内联访问的附加价值是值得的,但我很好奇我是否对JVM优化是正确的。所以,我的问题是--提议的重构绝对是一个没有操作的,因为JVM无论如何都会优化它,还是这里有一些微乎其微的理论特权?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-24 19:33:21

我不会特别期望它能优化它,不。

它必须确保Collections.transform从未隐藏Function,并且该方法本身从未使this可见等等。很明显,所有这些都是可行的--但在很少的情况下,为了相对较小的收益,这可能是相当多的工作。

现在,如果不仔细检查,就很难说出任何特定VM所做的事情--但我认为“它不会对性能产生显著影响”比“JVM优化它”更合理。

票数 8
EN

Stack Overflow用户

发布于 2011-05-24 19:38:45

是否将其提取到字段中应该取决于您调用它的频率和父类的持续时间。如果父类存在的时间和应用程序一样长,那么为什么还要为这样一个琐碎的操作保留一个实例呢?相反,如果您经常调用此对象,则可以将其保存在变量中,以避免创建多个对象所带来的麻烦。

我认为我自己的经验法则是,如果内部类的作用域在方法调用中,而您的方法不是性能关键且实现很小,那么就把它留在原来的位置。

票数 1
EN

Stack Overflow用户

发布于 2011-05-24 19:36:30

我不认为JVM会对其进行优化--很可能,性能损失不值得进行优化。然而,内联代码的巨大好处远远超过了它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6115783

复制
相关文章

相似问题

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