java - java什么时候比c++快(或者JIT什么时候比预编译快)?

标签 java performance optimization compiler-construction jit

<分区>

Possible Duplicate:
JIT compiler vs offline compilers

我听说在某些情况下,由于 JIT 优化,Java 程序或部分 Java 程序能够比 C++(或其他预编译代码)中的“相同”代码执行得更快。这是因为编译器能够确定某些变量的范围,避免某些条件并在运行时使用类似的技巧。

您能否举一个(或更好的 - 一些)示例,说明它适用于哪些地方?并可能概述编译器能够优化字节码的确切条件,超出预编译代码的可能范围?

注意:这个问题不是比较 Java 和 C++。它是关于 JIT 编译的可能性。请不要燃烧。我也不知道有任何重复。如果是,请指出。

最佳答案

在实践中,您可能会发现在这些情况下(所有这些都是我个人观察到的),您简单编写的 Java 代码优于您简单编写的 C++ 代码:

  • 大量小内存分配/解除分配。主要的 JVM 具有极其高效的内存子系统,垃圾回收比要求显式释放更高效(而且它可以移动内存地址等,如果它真的想要的话)。

  • 通过方法调用的深层层次结构进行高效访问。 JVM 非常擅长删除任何不必要的东西,根据我的经验,通常比大多数 C++ 编译器(包括 gcc 和 icc)都要好。这在一定程度上是因为它可以在运行时进行动态分析(即它可以过度优化,只有在检测到问题时才取消优化)。

  • 将功能封装到短生命周期的小对象中。

在每种情况下,如果您付出努力,C++ 可以做得更好(在自由列表和 block 分配/解除分配的内存之间,C++ 可以在几乎所有特定情况下击败 JVM 内存系统;使用额外的代码、模板和聪明的宏,你可以非常有效地折叠调用堆栈;你可以在 C++ 中拥有小的部分初始化的堆栈分配对象,其性能优于 JVM 的短暂对象模型)。但您可能不想付出努力。

关于java - java什么时候比c++快(或者JIT什么时候比预编译快)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4516778/

相关文章:

mysql:多索引建议

Mysql大表多日期where子句查询性能

c# - C# 中 try/catch 的真正开销是多少?

r - 我可以使用 Rcpp 加速我的 R 代码吗?

java - 计算 Activity 调用的更快算法

c# - C# 中的数学优化

java - ChannelFuture 监听器注册是否可靠?

java - Hibernate - ManyToMany 使用映射表之一的唯一属性

java - nio FileChannel.transferFrom 传输0?

java没有这样的方法(java.lang.NoSuchMethodException)异常