首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

Java优化
EN

Stack Overflow用户
提问于 2009-06-03 06:25:33
回答 5查看 371关注 0票数 1

我想知道之间是否有任何性能差异

  1. 字符串s= someObject.toString();System.out.println(s);

  1. System.out.println(someObject.toString());

查看生成的字节码,它似乎有不同之处。JVM能够在运行时优化这个字节码以使这两种解决方案提供相同的性能吗?

当然,在这种简单的情况下,解决方案2似乎更合适,但为了可读性起见,有时我更喜欢解决方案1,我只想确保在关键代码部分不引入性能“降低”。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-03 06:34:24

创建一个临时变量(特别是像字符串这样小的变量)与代码的速度无关,所以您应该停止担心这个问题。

尝试测量在代码的这一部分中花费的实际时间,我敢打赌,您将发现性能根本没有差别。调用toString()并打印出结果所需的时间远远长于存储临时值所需的时间,而且我认为您在这里根本找不到可测量的差别。

即使字节码在这里看起来不一样,这是因为javac太天真了,而且您的JIT编译器为您做了繁重的工作。如果这段代码对速度非常重要,那么它将被执行很多次,而您的JIT将选择它来编译成本机代码。很可能这两种代码都编译成相同的本机代码。

最后,为什么要在性能关键代码中调用System.out.println()?如果这里有什么东西会毁了你的表演,那会的。

票数 6
EN

Stack Overflow用户

发布于 2009-06-03 06:28:29

如果您有要求性能的关键代码部分,请避免使用System.out.println()。与变量赋值相比,使用标准输出会产生更多的开销。

做解决方案1。

编辑:或解决方案2

票数 2
EN

Stack Overflow用户

发布于 2009-06-03 06:30:10

没有足够关键的代码,以至于您的两个示例之间的差异会造成任何不同。我鼓励您对此进行测试;同时运行数百万次,并记录所需时间。

选择更具可读性和可维护性的表单。

*夸大了效果。如果你有足够重要的代码,你已经学习了它来学习它。

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

https://stackoverflow.com/questions/943331

复制
相关文章

相似问题

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