有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    我要勇敢地比较自己的表现

    Java编译器javac很少进行优化,更喜欢语法检查代码。它会进行所有合理的检查,以确保它能在JVM上运行,并进行一些持续的评估,仅此而已

    大多数智能编译是由JIT完成的,JIT可以根据程序的使用方式执行动态复杂化。例如,这允许它内联“虚拟”方法,即使调用者和被调用者位于不同的库中

    C/C++编译器预先执行重要的静态分析。这意味着程序从一开始就几乎全速运行。CPU通过指令重新排序和分支预测执行一些动态优化。虽然C/C++缺乏动态优化,但它通过使系统的低级访问变得更容易而获益。(这在Java中通常不是不可能的,但在C/C++中微不足道的低级操作在Java中可能会很复杂和模糊)它还提供了更多方法来做同样的事情,允许您选择问题的最佳解决方案

    当Java可能更快时

    • 如果您的编程风格适合Java,并且只使用Java支持的那种功能,那么Java可能会稍微快一点(由于动态编译),也就是说,您不会充分利用C/C++的潜力
    • 如果您的代码包含大量死代码(可能只有在运行时才知道是死的),Java在消除这一点上做得很好。(IMO)高比例的微基准建议java比C++快,这是
    • 您实施应用程序的时间和/或资源非常有限。(在这种情况下,更高级的语言可能更好)也就是说,您没有时间对代码进行太多优化,需要编写安全的抽象代码

    当C/C++可能更快时

    • 如果使用C/C++提供的大部分功能。更高级的程序员倾向于做一些事情
    • 如果启动时间很重要
    • 如果你需要对算法或数据结构有创意
    • 如果你能利用底层硬件功能,比如直接访问设备
  2. # 2 楼答案

    基本上,有两种魔法<只有某些巫师才能理解机器魔法JVM字节码魔法被一种特殊的巫师所理解,为了让机器巫师能够施展魔法,让你的计算机完成任务,你必须雇佣这种巫师。C和C++编译器通常发出机器eEM>类,而java编译器发出 JVM字节码p>

  3. # 3 楼答案

    对你的问题的正确回答可能需要几百页的篇幅,但我将试着用几段话来总结

    基本上,您提到的“经典编译模型”以人类编写的源代码作为输入,并发出机器代码,无需进一步翻译机器代码即可加载和运行。由此产生的一个后果是,生成的机器代码只能在兼容的硬件上运行,并且只能在兼容的操作系统中运行

    Java编译模型将人类编写的源代码作为输入,并不会发出机器代码,而是所谓的“byte code”。字节码不能直接在机器上执行。相反,它需要再次被另一个编译器翻译成机器代码,或者由在机器上执行与字节码中的指令相对应的指令的设备动态解释。后一种设备通常被称为虚拟机。该模型的一个分支是,字节码可以在任何平台上“运行”,该平台既有字节码编译器,也有为其编写的虚拟机。这给java带来了完全可移植性的外观和效果,在C++编译器栈所发出的机器代码中没有这样的可移植性。p>