如何编写高效的Java代码?

dil*_*ig0 18 java compiler-construction optimization jvm

正如大家所知,Java代码是由JVM编译和解释的.我的问题涉及优化:它是仅在运行时由JVM优化还是在编译时优化?

为了编写有效的代码,我在哪里可以找到支持的优化列表?或者JVM优化是否足够强大,以便我只需编写可读且易于维护的代码,而不管速度性能如何?

Jon*_*eet 32

大多数优化都是由JVM完成的.JIT级别的优化通常比编译时更多.("优化"标志实际上被取消了javac,因为事实证明一些"优化"实际上损害了现实世界中的性能.)

通常(这适用于许多语言/平台,而不仅仅是Java):

  • 编写尽可能可读和可维护的代码.
  • 拥有性能目标和基准,以便您始终可以衡量绩效
  • 努力使您的架构成为可能; 之后很难改变(与改变实施相比)
  • 在算法的复杂性方面考虑性能比"使其快10%":从O(n ^ 2)到O(n)的变化(通常)更为重要.(这在很大程度上取决于现实世界的使用情况 - 如果你只是处理小的值n,"理论上更好"的算法很容易因为常数因素而变慢.)
  • 使用分析器确定瓶颈所在
  • 当分析器表明它值得做时,只能以可读性为代价进行微优化
  • 在这样的优化之后进行测量 - 您实际上可能没有太大的影响,在这种情况下回滚

  • 要使用Sun JVM进行初始分析,请使用"jvisualvm".它是NetBeans概要分析器的独立版本,可以附加到正在运行的进程. (2认同)

ome*_*dat 5

Java HotSpot JIT编译器可以检测"热点"并自适应地修改执行代码,从而提供更好的性能.在这里阅读它.

另一方面,如果你想编写一个有效的代码,请阅读Robert Simmons 撰写的" Hardcore Java "或Brian Goetz 撰写的" Java Concurrency in Practice "等书.