正如大家所知,Java代码是由JVM编译和解释的。 我的问题涉及优化: 它是仅在运行时由JVM优化还是在编译时优化?
为了编写有效的代码,我在哪里可以找到支持的优化列表? 或者JVM优化是否足够强大,以便我只需编写可读且易于维护的代码,而不管速度性能如何?
答案 0 :(得分:31)
大多数优化都是由JVM完成的。 JIT级别的优化通常比编译时更多。 (“优化”标志实际上取自javac
,因为事实证明某些“优化”实际上损害了现实世界中的表现。)
一般而言(这适用于许多语言/平台,而不仅仅是Java):
n
的小值,那么“理论上更好”的算法很容易因为常数因素而变慢。)答案 1 :(得分:5)
Java HotSpot JIT编译器可以检测“热点”并自适应地修改执行代码,从而提供更好的性能。阅读它here。
另一方面,如果你想编写一个有效的代码,请阅读Robert Simmons的“Hardcore Java”或Brian Goetz的“Java Concurrency in Practice”等书。
答案 2 :(得分:4)
我绝对会选择编写代码来实现可读性和可维护性。
过早优化通常被视为一件坏事。 http://en.wikipedia.org/wiki/Optimization_(computer_science)#When_to_optimize
当然,使用性能分析工具测量和证明瓶颈是另一回事。 如果您这样做并且可以证明有些领域需要优化,那么您可以继续测量其优势并进行优化。
答案 3 :(得分:3)
是否在JVM的运行时进行了优化 只在编译时还是在编译时?
Java编译器通常只进行很少的优化(除了解析复合文字),因为“优化的”字节码可能会妨碍JIT编译器优化的能力 - 而这正是它真正重要的地方。
或者JVM优化功能强大 足以让我只需要写 代码易读且易于使用 无论速度如何都要保持 性能
这不是一个信任JVM来比你更好地优化的问题(尽管这绝对是一个因素),因为代码不经常执行,所以优化的问题在95%的时间完全无关紧要。如果一段代码占应用程序执行时间的0.1%,则根本不值得花时间。即使你可以加速100次,它也不会让你获益。这是最常见的情况。
只要你避免公然愚蠢的事情,你就应该忘记优化,直到遇到具体的性能问题,然后才能完全优化探查器告诉你的代码片段。
答案 4 :(得分:1)
虽然这些提示适用于Google Android的特定Java实现,但我猜these Google Android performance tips也适用于“普通”JVM。请注意,就我所知,Android的Java在运行时并不优化代码。
答案 5 :(得分:0)
不要担心特定的JVM优化。这些细节从版本变为版本。
从Josh Bloch购买“Effective Java”一书 - 这是关于这个主题的最好的书。
答案 6 :(得分:-1)
JVM优化从版本变为版本。