随着时间的推移,许多优化已经提高了 JVM 的性能。然而,尽管 Java 通常是第一个成功实现它们的虚拟机,但它们也经常被用于其他类似的平台。
1.即时编译
早期的 JVM 总是解释 Java 字节码。在普通应用程序中,Java 的性能损失比 C 大 10 到 20 倍。为了解决这个问题,Java 1.1 引入了即时 (JIT) 编译器。由于编译成本高,Java 1.2 引入了一个名为 HotSpot 的附加系统,并在 Java 1.3 中将其设为默认系统。使用这个框架,Java 虚拟机会不断分析程序性能,找出经常或重复执行的热点。然后针对这些热点进行优化,从而以最小的开销实现高性能执行,以降低性能要求不高的代码的开销。一些基准测试显示,通过这种方式,速度提高了 10 倍。但是,由于时间限制,编译器无法完全优化程序,因此生成的程序比本机代码替代方案慢。
2.自适应优化
自适应优化是计算机科学中的一种方法,它根据当前执行配置文件对程序的各个部分进行动态重新编译。通过简单的实现,自适应优化器可以简单地在即时编译和解释指令之间进行权衡。在另一个层面上,自适应优化可以利用本地数据条件来优化分支并使用内联扩展。
像 HotSpot 这样的 Java 虚拟机还可以对以前经过 JIT 的代码进行反优化。这允许执行积极(且可能不安全)的优化,同时仍然能够稍后对代码进行反优化并返回到安全路径。
3.垃圾收集
1.0 和 1.1 Java 虚拟机 (JVM) 使用标记清除收集器,这可能会在垃圾收集后对堆进行碎片化。从 Java 1.2 开始,JVM 改为使用分代收集器,其碎片整理行为要好得多。现代 JVM 使用各种方法,进一步提高了垃圾收集性能。
4.指针压缩
压缩的 Oops 允许 Java 5.0+ 使用 32 位引用寻址最多 32 GB 的堆。Java 不支持访问单个字节,仅支持默认为 8 字节对齐的对象。因此,堆引用的最低 3 位将始终为 0。通过将 32 位引用的分辨率降低到 8 字


619

被折叠的 条评论
为什么被折叠?



