这篇文章给大家简单介绍了针对Linux JIT的JVM的JIT诊断技术,内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。
要告诉你关于Linux JIT的JVM的JIT诊断当把一个Java程序从使用SunJDK的平台迁移到使用IBMJDK的平台时,重要的是要了解这两个厂商的JVM中使用的优化技术之间的差异,这些技术可能会影响程序,以及如何通过调整IBMJVM中可用的优化机制来获得更好的性能。
JVM for Linux JIT诊断简介
“只写一次,到处跑”的原则(WORA)只有在纯Javatrade的时候;仅当的字节码从一个平台的特定版本的Java虚拟机(JVM)移植到另一个不同平台的相同版本的JVM时。
然而,有时这个迁移过程并不是无缝的。影响迁移过程的一个因素是不同供应商的优化技术的内部实现之间的差异。
在将一个Java程序从使用SunJDK的平台迁移到使用IBMJDK的平台时,了解这两家厂商的JVM中使用的优化技术之间的差异很重要,这些差异可能会影响程序,以及如何通过调整IBMJVM中可用的优化机制来获得更好的性能。
本文主要针对JIT中遇到的问题进行诊断,这些问题可能会在从SunHotSpotJVM迁移到基于IBM JIT的JVM时遇到。
虽然本文介绍的大部分内容一般适用于IBM JVM 1 . 3 . 1和1.4.2,但它们尤其适用于IBM JVM 1 . 3 . 1和JVM1.4.2forLinux,包括POWER上的Linux和PowerPC架构。
在Sun的JVM1.3.1中,已经包含了JIT和HotSpot编译器,可以通过使用-server或-hotspot选项调用(默认为client HotSpotVM),JIT通过使用-classic选项调用,这是一个隐式的默认值。SunJDK1.4.1和更高版本的SunJDK,只能使用HotSpot。IBMJVM1.3.1和1.4.2使用JIT和MMI的组合,这是默认的运行模式,可以实现与HotSpot相同的功能。
JVM JIT和MMI
实时编译器被用来提高Java程序的性能。JIT是一个代码生成器,它将Java字节码转换成宿主平台的本地代码。使用JIT调用时,Java程序通常比使用解释器执行字节码时运行得更快。
当JVM启动时,许多方法被加载到JVM中并执行。
如果JIT被禁用,JVM会很快启动,但在大多数情况下,运行程序的速度会像解释字节码的速度一样慢。如果启用了JIT,但没有使用JIT的一些自适应优化机制,它会在启动时尝试编译所有方法。对于applet这样的小程序,当启动JVM的时间比运行程序的时间长时,可能会成为问题。
IBMJvmmixedModeExpressor(MMI)与JIT紧密集成,可以缓解这个问题。它可以用于与HotSpotVM相同的目的,将编译方法扩展到JVM的生命周期之外。在其他特性中,人机界面还可以计算特定方法被执行了多少次。为了实现均衡的性能,MMI对于IBMJVM支持的每个平台都有一个默认的上限计数器,这个计数器经过了仔细的选择和广泛的测试研究。
每次执行该方法时,MMI中该方法的上限计数器减少1。当方法的上限计数器达到零(0)时,可以使用JIT将方法编译成本地代码。因此,像HotSpotVM一样,经常使用的方法是mdashmdash“热点”mdashmdash会在启动JVM后由JIT编译,而低频使用的方法会在后面编译,或者可能在JVM进程的整个生命周期都不编译。
IBMJVM1.3.1和1.4.2还提供了一个非标准选项——Xquickstart,用于提高一些Java程序的启动时间。-Xquickstart选项导致优化选项的子集用于运行JIT;也就是快速编译的方法。此选项适用于短时间运行的程序,尤其是那些执行时间不集中在少数“热点”方法中的程序。如果在包含一些热点方法的长时间运行的程序上使用-Xquickstart选项,此选项可能会导致性能下降。
与其他非标准-X选项一样,-Xquickstart选项的实施和存在可能会在不通知的情况下进行修改。
可以减少MMI上限计数器,以加快方法的JIT编译。或者增加它来达到相反的效果。这是通过使用环境变量IBM_MIXED_MODE_THRESHOLD来实现的,与其他环境变量一样,它需要在运行JVM进程的shell实例中设置。自然,这个变量是在启动JVM进程之前设置的,对JVM中执行的所有方法都有效。
将IBM_MIXED_MODE_THRESHOLD设置为0可以禁用MMI,这样当* * *加载到JVM中时,所有方法都可以立即被JIT编译。
IBMJVM运行时模式如下:
MMI和JIT启用。
这是默认的IBM。
JVM设置。
◆MMI禁用,JIT启用
所有的方法都是在***运行之前编译的,即JVM的启动时间可能会很慢,但是后来的性能会很好。
◆MMI和JIT都禁用
JVM是一个纯解释系统。所有的代码都不会进行编译。禁用JIT同时还会自动禁用MMI,并将IBM_MIXED_MODE_THRESHOLD设置为0,这样可以有效地禁用MMI,但是不会禁用JIT。
MMI是一个非常有效的解释器,利用宿主平台上的程序集代码来达到***的优化。虽然JIT并不是JVM的一个集成部分,但却以一个共享库(libjitc)的形式提供了,它与MMI紧密地结合在一起,JIT和MMI是IBMJVM中紧密结合的两种技术。
在JavaHotSpotVM或经典的JIT模式中使用的是SunJVM1.3.1,Sun的JIT实现并不与IBM的JIT完全相同;SunHotSpotJVM1.4.1中根本没有JIT。当将Java程序从SunJVM1.3.1或SunJVM1.4.1迁移到IBMJVM上时,在一些非常罕见的情况中可能会出现问题,问题的范围从性能的下降,到代码会产生不正确的结果,以及JVM的挂起、崩溃和出现一些异常。
上述内容就是JVM for Linux JIT诊断技术的简介是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/44232.html