Java,JIT和垃圾收集器的效率

Squ*_*all 4 java performance jit garbage-collection

我想知道Java的效率以及Java虚拟机和Android的优缺点.效率是内存使用率低,处理器使用率低和执行速度快.

移动设备比PC更简单,然后应用程序需要更高效.服务器接收许多连接,它们需要非常高效.许多移动设备使用Android和Java应用程序,许多服务器使用PHP.

Java和解释语言(如Java Script,Python和PHP)能否比C和C++更高效?

JIT(及时)优势:

  • 它可以更好地进行优化,因为它知道某些变量的价值以及使用或更改的位置.
  • 它了解处理器并可以使用处理器特定指令进行优化.
  • 将函数转换为内联函数更容易.
  • 它可以删除已知的条件测试并删除不会运行的块.

Java缺点:

  • 当应用程序第一次运行时,应用程序将非常慢,因为字节码将被解释,JIT编译器将进行许多分析以找到良好的优化.应用程序无法使用最大的硬件电源.如果一个应用程序是一个游戏或一个实时应用程序,如果它是第一个成功运行并且没有延迟,但它使用最大的硬件功率,那么下次运行应用程序时,它将不会使用由于优化而产生的硬件功率最大值.问题是app无法设计为在优化后使用最大的硬件功率,因为​​它在第一次运行时会太慢,并且不会继续运行.
  • Java检查数组索引是否不在边界内,并检查指针是否为空.它将为生成的代码添加几个内部"if".
  • 所有对象都使用垃圾收集器,包括非常容易手动删除的对象.
  • 所有对象实例都是使用动态内存分配创建的,包括可以轻松使用堆栈的对象.如果循环迭代开始创建类的实例并结束删除创建的对象,则动态内存分配将是低效的.
  • 垃圾收集器需要在清理内存时停止应用程序,这对于游戏,GUI应用程序和实时应用程序来说是非常不受欢迎的.引用计数很慢,无法处理循环引用.多线程垃圾收集器速度较慢,需要更多地使用CPU.

Don*_*ows 5

Java和解释语言(如Java Script,Python和PHP)能否比C和C++更高效?

获得比最好的C和C++程序更高效是非常困难的.有很多C和C++程序远不如此高效,如果你有任何好处,用(现代)Java代码击败它们是非常实用的.我也听说过当前最好的Javascript引擎的好东西,但我从来没有详细研究它们.

使用Python和PHP(以及许多其他语言),它有点不同.这些语言是用C语言编写的,因此显然它们不能比C更高效(遵循构造).然而,在它们中编写高效代码(即,使用实际上是一个编写得非常好的C库)比从头开始编写代码要容易得多.特别是,它减少了每个程序的缺陷数量.这是实践中非常重要的指标; 任何人都可以生成快速代码,如果它被允许是错误的.

总的来说,我建议不要担心获得最大效率.你违反了收益递减法则.相反,使用合理的整体算法(或者,正如我的朋友曾经对我说的那样,"照顾大O()并让恒定因素照顾自己")并关注程序是否足够好的问题在实践中.一旦它,停止摆弄并运送它!