解释器做了很多额外的工作,所以可以理解,它们最终比本机代码慢得多。但是像C#或Java这样的语言都有即时编译器,它们应该编译成平台本机代码。
然而,根据benchmarks的说法,在大多数情况下,速度仍然比C/C++慢2-4倍?当然,我的意思是与同等优化的C/C++代码相比。我很清楚JIT编译的优化优势,以及它们生成比优化较差的C+C++更快的代码的能力。
在所有关于Java内存分配有多好的争论之后,为什么要使用这样的horrendous内存呢?在这个特定的基准测试套件中,平均使用了2到50倍的内存,这是不容忽视的……
请注意,我不想挑起战争,我是在询问定义这些性能和效率数字的技术细节。
发布于 2012-08-09 19:52:04
产生差异的一些原因;
发布于 2013-08-03 22:32:09
,但是诸如C#或Java之类的语言都有JIT编译器,这些编译器应该编译成平台本机代码。
解释器最终也必须翻译成机器代码。但是为了更好的启动和执行时间,JITters在编译和优化上花费的精力更少。从用户的角度来看,将时间浪费在编译上会使用户感觉到的性能变差,所以只有在像在AoT compiler中这样做一次的情况下才有可能。
他们还必须对编译结果进行监控,以进一步重新编译和优化热点,或者取消对很少使用的路径的优化。然后他们不得不偶尔解雇GC。这比普通的编译二进制文件需要更多的时间。此外,JITter和JITted程序的大量内存使用可能意味着较低的缓存使用效率,这反过来也会降低性能
有关内存使用的更多信息,可以参考here
的内存使用量比C++的内存使用量大得多,这是因为:
在大多数情况下,由于C++虚拟机、类加载和自动调整内存大小的巨大开销,Java应用程序将比等效的Java应用程序消耗更少的内存。对于内存是在语言和运行时环境之间进行选择的关键因素的应用程序,需要进行成本/收益分析。
还应该记住,使用垃圾收集器的程序可能需要多达五倍于使用显式内存管理的程序的内存,才能达到相同的性能。
发布于 2016-05-27 07:19:01
为什么会有如此可怕的内存使用率?在这个特定的基准测试套件中,内存使用量是2倍到50倍,平均大约是30倍,这是不容忽视的……
https://stackoverflow.com/questions/11881853
复制相似问题