当前位置: 首页 > 面试题库 >

Java优化

缪宪
2023-03-14
问题内容

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

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

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

查看生成的字节码,似乎有所不同。JVM是否能够在运行时优化此字节码,以使两个解决方案提供相同的性能?

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


问题答案:

临时变量(尤其是像String这样小的变量)的创建与代码的速度无关紧要,因此您不必再为此担心。

尝试测量在这部分代码中花费的实际时间,我敢打赌,您会发现根本没有性能差异。调用toString()和打印结果所花费的时间比存储临时值所花费的时间要长得多,而且我认为您根本不会在这里找到可测量的差异。

即使字节码在这里看起来有所不同,这也是因为它javac很幼稚,您的JIT编译器为您完成了繁重的工作。如果此代码确实对速度很重要,那么它将执行很多次,并且您的JIT将选择它以编译为本机代码。两者很可能都编译为相同的本机代码。

最后,为什么要调用System.out.println()关键性能代码?如果这里有任何事情会影响您的表现,那将会。



 类似资料:
  • 在完成一个模块后,应该从那几个方面对代码进行优化,有哪些方法可以进行优化

  • 有没有代码写的漂亮的大佬,看看这个代码怎么优化,一直写前端的,突然被叫去搞java,发现很多技术都不太相同,例如动态的key去调用之类,导致写出这样的恶心代码,自己都看不下去了 明明js可以写的这么短小优雅,java有没有办法做到这样子的呢

  • 我用java为循环做了一些运行时测试,发现了一个奇怪的行为。对于我的代码,我需要像int、Double等原始类型的包装对象来模拟io和输出参数,但这不是重点。看看我的代码。具有字段访问权限的对象怎么会比原始类型更快? 带压缩型的循环: 结果: MicroTime原语(max:=10000.0):110 MicroTime原语(max:=100000.0):1081 MicroTime原语(max:

  • 本文向大家介绍优化Java虚拟机总结(jvm调优),包括了优化Java虚拟机总结(jvm调优)的使用技巧和注意事项,需要的朋友参考一下 堆设置 -Xmx3550m:设置JVM最大堆内存为3550M。 -Xms3550m:设置JVM初始堆内存为3550M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xss128k:设置每个线程的栈大小。JDK5.0以后每个线程栈大小为

  • 问题内容: 我使用java for循环进行了一些运行时测试,并发现了一种奇怪的行为。对于我的代码,我需要原始类型(例如int,double等)的包装对象来模拟io和输出参数,但这不是重点。只是看我的代码。具有字段访问权限的对象如何比原始类型更快? 优先类型的循环: 结果: MicroTime原语(最大值:= 10000.0):110 MicroTime原语(最大值:= 100000.0):1081

  • 问题内容: 在Java6中,quicksort和mergesort分别在中用于原始数组和对象数组。在Java7中,它们都已更改为DualPivotQuicksort和Timsort。 在新的快速排序的来源中,以下注释出现在几个地方(例如354行): 这是一个性能问题吗?编译器不会将这些简化为同一件事吗? 更广泛地说,调查自己的最佳策略是什么?我可以运行基准测试,但对分析已编译代码中的任何差异会更感