千家信息网

如何理解JVM for Linux JIT诊断技术

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,如何理解JVM for Linux JIT诊断技术,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JVM有很多值得学习的地方,简要介绍
千家信息网最后更新 2024年11月17日如何理解JVM for Linux JIT诊断技术

如何理解JVM for Linux JIT诊断技术,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

JVM有很多值得学习的地方,简要介绍Just-In-Time(JIT)编译器和Mixed ModeInterpreter(MMI)优化技术,在IBM的JVM1.3.1和1.4.2中使用了这两种技术,它们对于从SunHotspotJVM上迁移过来的Java程序可能产生影响。

JVM for Linux JIT 诊断技术简介

"一次编写,到处运行"(WORA)的原则只有在将纯Java™的字节码从一个平台的某个特定版本的Java虚拟机(JVM)移植到另外一个不同平台上完全相同版本的JVM上时才适用。

然而,有时这种迁移过程并不是无缝的。可以对这个迁移过程产生影响的一个因素是不同供应商的优化技术的内部实现之间存在差异。

在将一个Java程序从使用SunJDK的平台迁移到使用IBMJDK的平台上时,重要的是要了解在这两个供应商的JVM中使用的优化技术之间的差异,这些差异可能会对程序产生影响,以及如何通过调节IBM JVM中可用的优化机制来获得更好的性能。

本文着重介绍对于在JVM for Linux JIT中碰到的问题的诊断,在从SunHotSpotJVM迁移到IBM基于JVM for Linux JIT的JVM时可能会碰到这些问题。

虽然本文中介绍的大部分内容对于IBMJVM1.3.1和1.4.2都是普遍适用的,但是尤其适用于IBMJVM1.3.1和JVM1.4.2forLinux,包括POWER和PowerPC架构上的Linux。

在Sun的JVM1.3.1中,JIT和HotSpot编译器都已经包含其中了,可以使用-server或-hotspot选项(默认为客户机HotSpotVM)来调用,使用-classic选项调用JIT,-hotspot选项是隐含的默认值。在SunJDK1.4.1及之后的版本中,只能使用HotSpot了。IBMJVM1.3.1和1.4.2使用了JIT和MMI的组合,这是默认的运行模式,可以实现与HotSpot相同的功能。

JVM for Linux JIT和MMI

用来提高Java程序性能的工具是Just-In-Time(JIT)编译器。JVM for Linux JIT是一个代码生成器,它将Java字节码转换成宿主平台的本地代码。Java程序使用JIT调用时的运行速度通常都比使用解释程序执行字节码时的速度更快。

当JVM启动时,会有很多方法被加载到JVM中并执行。

如果JIT被禁用了,那么JVM启动会很快,但是在大部分情况中,运行程序的速度都会与解释字节码的速度一样慢。如果JIT被启用了,但是并没有使用JIT的一些自适应式优化机制,就会试图在启动时对所有方法进行编译。对于诸如applet之类的小程序来说,当启动JVM的时间长于运行程序的时间时,就可能会成为问题。

IBM JVMMixedModeInterpreter(MMI)与JIT紧密地结合在一起,它可以减轻这个问题。它可以用于与HotSpotVM相同的目的,将编译方法延伸到JVM的生命期之外。除了其他特性之外,MMI还可以计算一个特定的方法被执行了多少次。为了达到平衡的性能,MMI对于IBMJVM支持的每种平台都有一个默认的上限计数器,这是经过仔细选择的,并经过了广泛的测试和研究。

每执行一次方法,该方法在MMI中的上限计数器就减1。当一个方法的上限计数器达到零(0)时,就可以使用JIT将这个方法编译成本地代码了。因此,与HotSpotVM一样,高频率使用的方法——"热点"——都会在启动JVM之后由JIT进行编译,而低频度使用的方法则会在之后进行编译,或者可能在整个JVM进程的生命周期中都不会被编译。

IBM JVM1.3.1和1.4.2还为改进某些Java程序的启动时间而提供了一个非标准的选项-Xquickstart。-Xquickstart选项会导致使用优化选项的子集来运行JIT;也就是说,快速编译的方法。这个选项适用于短期运行的程序,特别是那些执行时间不集中在少量的"热点"方法中的程序。如果-Xquickstart选项用在长时间运行的程序上,而这些程序又包含一些热点方法,那么这个选项就可能会导致性能的降低。

与其他非标准的-X选项一样,-Xquickstart选项的实现和存在都可能不加通知就会修改。

可以减小MMI上限计数器,从而加速JIT编译一个方法的过程;或者增大它以达到相反的效果。这是通过使用一个环境变量IBM_MIXED_MODE_THRESHOLD实现的,与其他环境变量一样,需要在运行JVM进程的shell实例中进行设置。自然,这个变量是在启动JVM进程之前设置的,对于在JVM中执行的所有方法都是有效的。

将IBM_MIXED_MODE_THRESHOLD设置为0可以禁用MMI,这样,所有的方法在***加载到JVM中时就可以立即使用JIT进行编译。

IBM JVM运行时模式如下:

◆MMI和JIT都启用

这是默认的IBMJVM设置。

◆MMI禁用,JIT启用

所有的方法都是在***运行之前编译的,即JVM的启动时间可能会很慢,但是后来的性能会很好。

◆MMI和JIT都禁用

JVM是一个纯解释系统。所有的代码都不会进行编译。禁用JVM for Linux JIT同时还会自动禁用MMI,并将IBM_MIXED_MODE_THRESHOLD设置为0,这样可以有效地禁用MMI,但是不会禁用JIT。

MMI是一个非常有效的解释器,利用宿主平台上的程序集代码来达到***的优化。虽然JIT并不是JVM的一个集成部分,但却以一个共享库(libjitc)的形式提供了,它与MMI紧密地结合在一起,JVM for Linux 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诊断技术问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

方法 程序 编译 运行 问题 技术 平台 代码 性能 时间 相同 上限 字节 计数器 这是 速度 解释 有效 变量 差异 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 16年网络安全法 云服务器大学生 网络安全哪个公司比较好 新思路软件开发中心答案 阿阳解说我的世界西瓜星球服务器 电信宽带访问不了联通服务器 数据库多机部署架构 武汉小程序软件开发代码 利用数据库做微信推送文章 数据库中表和视图是什么意思 自营网络安全与执法书 安全咨询软件开发 时空猎人怎么点进去服务器爆满了 怎么清空服务器的缓存 山东人口系统软件开发 宁波品牌网络技术市场价格 朝阳区威力软件开发调试 华硕电脑服务器设置禁止多个ip 查看数据库基本参数 js数据循环重复数据库 航天型号软件开发规范 网络规划与设计计算机网络技术 安卓旅游软件开发 pupg轻量版服务器繁忙怎么办 济南高新区软件开发招聘 关于信息网络安全说法正确的有 软件开发需要哪些技术能力 数据库服务器主频 黄冈信息网络安全 如何对服务器加固
0