2009-07-17 117 views
6

随着时间的推移,Sun的JVM和JIT变得非常聪明。过去常常被认为是必要的微观优化的东西不再需要,因为它会得到照顾。智能JVM和JIT微优化

例如,过去应该将所有可能的类标记为final,以便JVM尽可能多地嵌入代码。但是现在,JIT知道你的类是否是最终的,基于哪些类在运行时被加载,并且如果你加载一个类来使原始类不能最终结束,那么它将取消内联方法并将其标记为最后。

JVM或JIT为您做了哪些其他智能微优化?

编辑:我做了这个社区wiki;我想收集这些随着时间的推移。

回答

6

这是令人印象深刻的。所有这些都是你在C++中做的事情(当然与Java相同)。请记住,早期版本的Java由于没有这些东西而开始了“缓慢”的声誉,并且随着时间的推移,我们不断改进显着。这仍然是一个很大的研究领域。

+0

好的java可能很聪明,但它仍然使用很多资源 – Roch 2009-11-25 13:36:46

+2

@mnml它比流行的意见是少的。创建一个对象,我认为他们把它归结为2或3条指令。是的,像C++一样速度通常更快,但“资源”不仅仅是CPU和内存;这也是人潮。硬件很便宜,人们很贵。从长远来看,Java通常会在性能上胜出,因为它的JIT非常惊人,并且会比大多数C++应用程序所梦想的更优化应用程序。 – 2010-04-19 20:07:18

+1

@亚历希望我可以给你代表指出人是资源。尽可能相信这一点。作为一名员工,你的时间往往比公司花费更多的钱,而不是说硬盘中额外增加了1 TB的数据,或者在老式的网络服务器中使用更好的CPU。 – 2011-01-28 18:51:21

3

Java是在更智能的内联,因为它可以

  • 内联代码仅在运行时可用 或甚至动态生成的。
  • 内嵌虚拟方法(一次最多两个)
  • 对内联方法及其内联方法执行换码分析。 (很难在C++中使用 )