我想了解Java的效率以及Java虚拟机和Android的优缺点。效率是指低内存使用,低处理器使用和快速执行。
移动设备比PC简单,因此应用程序需要更高的效率。服务器接收许多连接,它们需要非常高效。许多移动设备使用Android和Java应用程序,许多服务器使用PHP。
Java和解释性语言(例如JavaScript、Python和PHP)是否可以比C和C++更有效?
JIT(即时编译)的优点:
- 它可以更好地进行优化,因为它知道一些变量的值以及它们在哪里使用或更改。 - 它知道处理器并且可以使用处理器特定的指令进行优化。 - 将函数转换为内联函数更容易。 - 它可以删除已知的条件测试并删除不会运行的块。
Java的缺点:
- 当应用程序第一次运行时,由于字节码将被解释并且JIT编译器将进行许多分析以找到良好的优化,因此应用程序将非常慢。应用程序无法使用硬件的最大功率。如果应用程序是游戏或实时应用程序,并且第一次成功运行且没有延迟,但它使用了硬件的最大功率,则下一次运行该应用程序时,由于优化,它将不使用硬件的最大功率。问题在于,应用程序不能被设计为在优化后利用硬件的最大功率,因为它将在第一次运行时太慢,并且不会继续运行。 - Java检查数组索引是否超出范围,并检查指针是否为空。它将向生成的代码添加几个内部“if”。 - 所有对象都使用垃圾收集器,包括非常容易手动删除的对象。 - 所有对象实例都使用动态内存分配,包括可以轻松使用堆栈的对象。如果循环迭代开始创建类的实例并结束删除已创建的对象,则动态内存分配将是低效的。 - 垃圾收集器需要停止应用程序,同时清理内存,这对于游戏、GUI应用程序和实时应用程序非常不希望。引用计数速度较慢,无法处理循环引用。多线程垃圾收集器速度较慢,需要更多地使用CPU。
移动设备比PC简单,因此应用程序需要更高的效率。服务器接收许多连接,它们需要非常高效。许多移动设备使用Android和Java应用程序,许多服务器使用PHP。
Java和解释性语言(例如JavaScript、Python和PHP)是否可以比C和C++更有效?
JIT(即时编译)的优点:
- 它可以更好地进行优化,因为它知道一些变量的值以及它们在哪里使用或更改。 - 它知道处理器并且可以使用处理器特定的指令进行优化。 - 将函数转换为内联函数更容易。 - 它可以删除已知的条件测试并删除不会运行的块。
Java的缺点:
- 当应用程序第一次运行时,由于字节码将被解释并且JIT编译器将进行许多分析以找到良好的优化,因此应用程序将非常慢。应用程序无法使用硬件的最大功率。如果应用程序是游戏或实时应用程序,并且第一次成功运行且没有延迟,但它使用了硬件的最大功率,则下一次运行该应用程序时,由于优化,它将不使用硬件的最大功率。问题在于,应用程序不能被设计为在优化后利用硬件的最大功率,因为它将在第一次运行时太慢,并且不会继续运行。 - Java检查数组索引是否超出范围,并检查指针是否为空。它将向生成的代码添加几个内部“if”。 - 所有对象都使用垃圾收集器,包括非常容易手动删除的对象。 - 所有对象实例都使用动态内存分配,包括可以轻松使用堆栈的对象。如果循环迭代开始创建类的实例并结束删除已创建的对象,则动态内存分配将是低效的。 - 垃圾收集器需要停止应用程序,同时清理内存,这对于游戏、GUI应用程序和实时应用程序非常不希望。引用计数速度较慢,无法处理循环引用。多线程垃圾收集器速度较慢,需要更多地使用CPU。
cmp [eax],eax
。对于非空对象的情况,在现代处理器中几乎所有情况下,此指令不会导致延迟。如果指针为空,则运行时可以处理段错误以抛出适当的异常。 - Sam Harwell