西西河

主题:【讨论】解释执行类代码的性能有无可能达到甚至超过本机编译代码 -- 老兵帅客

共:💬64
全看分页树展 · 主题 跟帖
家园 再说几句。现在好像没有严格意义上的解释执行类代码了。

Java 的VM是混合型的。简单的运算是解释执行,费时的反复进行的操作进行编译,生成本机代码。这部优化工作可以超过C++的静态优化,因为它现在更了解程序运行的特点。而C++/C的编译器在生成本机代码的时候没有这些信息。那么为什么不将所有的Code在运行前编译成本机代码呢。Sun的理论是“磨刀有时会误砍柴功”。编译和优化是有代价的。只有当收获大于开销的时候才有意义。基于这个原理,Hotspot JVM要观察程序的运行一段时间才能决定哪些操作有必要优化。

微软的CLR是JIT技术。也就是在运行前,MSIL要转化为本机代码。这种技术早期的Java使用过,但后来放弃了。不知道为什么微软使用这种技术。在实施细节上,CLR和JVM也有些不同。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河