在实践中,在以下情况下(您亲自观察到的所有情况),您可能会发现天真地编写的Java代码优于天真地编写的C ++代码:
很多很少的内存分配/释放。主要的JVM具有非常高效的内存子系统,并且垃圾回收可能比要求显式释放更为有效(此外,垃圾回收可以转移内存地址,如果确实需要的话)。
通过深层次的方法调用进行有效访问。JVM非常擅长消除不必要的内容,以我的经验,通常比大多数C ++编译器(包括gcc和icc)要好。在某种程度上,这是因为它可以在运行时进行动态分析(即,它可能过度优化,并且仅在检测到问题时才进行优化)。
将功能封装到小的短期对象中。
在每种情况下,如果您全力以赴,C 都可以做得更好(在空闲列表和块分配/取消分配的内存之间,C
在几乎每种特定情况下都可以击败JVM内存系统;有了额外的代码,模板和巧妙的宏,您可以非常有效地折叠调用堆栈;并且可以在C
++中使用小的部分初始化的堆栈分配对象,这些对象的性能优于JVM的短期对象模型。但是您可能不想付出努力。



