众所周知,Java 代码是由 JVM 编译和解释的。 我的问题涉及优化: 它是仅由 JVM 在运行时优化还是也在编译时优化?
为了编写高效的代码,在哪里可以找到支持的优化列表? 或者 JVM 优化是否足够强大,以至于我只需要编写可读且易于维护的代码,而不管速度性能如何?
大部分优化是由 JVM 完成的。通常,JIT 级别的优化范围比编译时更大。 (“优化”标志实际上是从
javac
中取出的,因为事实证明,一些“优化”实际上会损害现实世界中的性能。)
一般来说(这适用于许多语言/平台,而不仅仅是 Java):
n
值,那么“理论上更好”的算法很容易因常数因素而变慢。) Java HotSpot JIT 编译器可以检测“热点”并自适应地修改执行代码,从而提供更好的性能。请阅读此处。
另一方面,如果您想编写一开始就高效的代码,请阅读诸如 Robert Simmons 的“Hardcore Java”或 Brian Goetz 的“Java Concurrency in Practice”之类的书。
我肯定会选择编写代码以提高可读性和可维护性,而不是所谓的优化。
过早的优化通常被视为一件坏事。 http://en.wikipedia.org/wiki/Optimization_(computer_science)#When_to_optimize
当然,使用分析工具测量和证明瓶颈完全是另一回事。 如果您这样做并且可以证明存在需要优化的领域,那么您就可以继续衡量收益并进行优化。
JVM 在运行时是否进行了优化 仅或也在编译时?
Java 编译器通常很少进行优化(除了解析复合文字之外),因为“优化”字节码可能会阻碍 JIT 编译器的优化能力 - 而这才是真正重要的地方。
或者 JVM 优化是否强大 足够了,我只需要写 代码可读且易于使用 无论速度如何都保持 表演?
这不是一个相信 JVM 会比你优化得更好的问题(尽管这绝对是一个因素),这是一个在 95% 的时间里优化完全无关的问题,因为代码不经常执行。如果一段代码占应用程序执行时间的 0.1%,那么它根本不值得费心。即使你能将其速度提高100倍,也没有任何好处。这是最常见的情况。
只要避免明显愚蠢的事情,就应该忘记优化,直到出现具体的性能问题,然后只优化分析器告诉您代码中热点的代码片段。
虽然这些技巧适用于 Google Android 的特定 Java 实现,但我猜 这些 Google Android 性能技巧也适用于“普通”JVM。请注意,据我所知,Android 的 Java 不会在运行时优化代码。
不用担心特定的 JVM 优化。这些细节随着版本的不同而变化。
从 Josh Bloch 那里购买《Effective Java》一书——这是关于这个主题的最好的书。
JVM 优化随版本的不同而变化。