java即时编译器_Java即时编译:不仅仅是一个流行词

java即时编译器

最近的Java生产性能问题迫使我重新审视并真正欣赏Java VM即时(JIT)编译器。 大多数Java开发人员和支持人员都听说过这种JVM运行时性能优化,但是有多少人真正理解并欣赏它的好处? java_vm_JIT_buzzword

本文将与您分享在添加新的虚拟服务器(容量改进和水平扩展项目)之后我所涉及的故障排除练习。

有关JIT的更深入介绍,我建议以下文章:

  • ##即时编译: http : //en.wikipedia.org/wiki/Just-in-time_compilation
  • ## Java HotSpot性能引擎体系结构: http : //www.oracle.com/technetwork/java/whitepaper-135217.html
  • ##了解即时编译和优化: http : //docs.oracle.com/cd/E15289_01/doc.40/e15058/underst_jit.htm
  • ## JIT编译器如何优化代码: http : //pic.dhe.ibm.com/infocenter/java7sdk/v7r0/index.jsp?topic=%2Fcom.ibm.java.zos.70.doc%2Fdiag%2Funderstanding% 2Fjit_overview.html

JIT编译概述

JIT编译本质上是一个在运行时提高Java应用程序性能的过程。

下图说明了不同的JVM层和交互。 它描述了以下高层过程:

  1. Java编译器将Java源文件编译为平台无关的字节码或Java类文件。
  2. 触发Java应用程序后,JVM将在运行时加载已编译的类,并通过Java解释器执行适当的计算语义。
  3. 启用JIT后,JVM将分析Java应用程序方法调用并将字节码(在达到某些内部阈值之后)编译为本机的,更有效的机器代码。 通常,最繁忙的方法调用首先确定JIT进程的优先级。
  4. 一旦将这种方法调用编译为机器代码,JVM将直接执行它,而不是“解释”它。
  5. 随着时间的流逝,上述过程可改善运行时性能。

JVM_JIT_interraction

案例分析

现在这里是我之前提到的项目的背景。 主要目标是在生产环境中添加新的IBM P7 AIX虚拟服务器(LPAR),以提高平台的容量。 查找以下平台本身的规格:

  • Java EE服务器 : IBM WAS 6.1.0.37和IBM WCC 7.0.1
  • 操作系统 :AIX 6.1
  • JDK :IBM J2RE 1.5.0(SR12 FP3 + IZ94331)@ 64位
  • RDBMS :Oracle 10g
  • 平台类型 :中间层和批处理

为了达到现有的应用程序性能水平,购买了完全相同的硬件规格。 还使用与现有产品相同的版本安装了AIX OS版本和其他IBM软件。

为了确保应用程序具有相同的性能水平,对以下各项(清单)均进行了验证:

  • 硬件规格(#CPU内核,物理RAM,SAN…)。
  • 操作系统版本和补丁程序级别; 包括AIX内核参数。
  • IBM WAS和IBM WCC版本,补丁程序级别; 包括调整参数。
  • IBM JRE版本,补丁程序级别和调整参数(启动参数, Java堆大小 ……)。
  • 还正确评估了网络连接性和性能。

新的生产服务器构建完成后,将执行功能测试,该测试还确认了联机和批处理应用程序的正常行为。

但是,在其生产运营的第一天就发现了主要的性能问题。 您将在下面找到所观察到的性能问题的摘要矩阵。

生产服务器
运行时间
处理量(#个订单)
中央处理器 %
(平均)
中间件健康
现有服务器 10个小时 25万(基准) 20% 健康
*新*服务器 10个小时 5万-500% 80%+ 400% 高线程利用率

从上面的视图中可以看到,性能结果在生产的第一天就非常灾难性。 与现有生产服务器相比,新生产服务器不仅处理了更少的订单,而且物理资源利用率(例如CPU%)也要高得多。

考虑到确保新服务器的构建与现有服务器完全相同所花费的时间,这种情况令人感到困惑。 那时,另一个核心团队参与进来,以执行额外的故障排除并确定性能问题的根源。

故障排除:寻找罪魁祸首…

故障排除团队分为两部分,以专注于以下项目:

  • 从IBM WAS容器中识别CPU%的来源,并将CPU占用空间与现有生产服务器进行比较。
  • 在现有生产服务器和新生产服务器之间执行更多数据和文件比较。

为了了解CPU%的来源,我们确实从运行IBM WAS和IBM WCC的IBM JVM中对每个线程执行了AIX CPU分析 。 从下面的屏幕快照中可以看到,发现许多线程各自使用5-20%。 在现有生产服务器上执行的相同分析确实显示出更少的线程数量,CPU占用率始终在5%左右。

JIT_CPU_per_Thread_analysis

结论:

相同类型的业务流程使用的CPU是现有生产服务器的3-4倍。

为了了解执行的处理类型,每个线程数据在CPU的同时捕获了JVM线程转储 。 现在,在查看了JVM线程转储(Java内核)之后,我们意识到的第一件事是确实禁用了JIT! 通过从正在运行的JVM进程中运行java –version命令也可以确认该问题。

IBM_JVM_Javacore_JIT_disabled

这个发现非常重要,特别是考虑到在现有生产服务器上启用了JIT。 大约在同一时间,负责比较服务器的另一个团队确实发现了用于启动应用程序的AIX用户的环境变量之间的差异。 早期的差距分析忽略了这种比较练习。 他们发现新的AIX生产服务器具有以下额外条目:

JAVA_COMPILER=NONE

根据IBM文档 ,添加此类环境变量是禁用 JIT的方法之一。

复杂的根本原因分析,简单的解决方案

为了了解在我们的环境中禁用JIT的影响,您必须了解其含义。 禁用JIT本质上意味着整个JVM现在都在解释模式下运行。 对于我们的应用程序,以完全解释模式运行不仅会大大降低应用程序的吞吐量,而且还会增加服务器CPU利用率的压力点,因为每个请求/线程占用的CPU数量是使用JIT执行的请求的3-4倍(请记住,当使用JIT时启用后,JVM将直接对机器/本机代码执行许多调用)。

如预期的那样,删除此环境变量以及重新启动受影响的JVM进程确实解决了问题并恢复了性能级别。

评估您的应用程序的JIT收益

我希望您对这个案例研究和对JVM JIT编译过程的简短回顾表示赞赏。 为了了解不对Java应用程序使用JIT的影响,建议您进行以下实验:

  • 在启用了JIT的情况下为您的应用程序生成负载,并捕获一些基准数据,例如CPU%,响应时间,#个请求等。
  • 禁用JIT。
  • 重做相同的测试并比较结果。

参考: Java即时编译:在Java EE支持模式博客上, 不仅仅是 JCG合作伙伴 Pierre Hugues Charbonneau 的时髦 词汇 。

翻译自: https://www.javacodegeeks.com/2013/07/java-just-in-time-compilation-more-than-just-a-buzzword.html

java即时编译器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB2021下载安装图文教程

微信公众号:创享日记 发送关键词:matlab 免费获取下面教程中的 Matlab_ R2021a(64bit) 安装包 前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点…

如何在飞书自建项目中接入ChatGPT打造智能问答助手并远程访问

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话,在下面操作步骤中…

Java中没有递归的二进制搜索–迭代算法

本周的任务是用Java实现二进制搜索 ,您需要编写迭代和递归二进制搜索算法 。 在计算机科学中,二进制搜索或半间隔搜索是一种分而治之的算法,用于定位项目在排序数组中的位置。 二进制搜索通过将输入值与数组的中间元素进行比较来工作。 比较确…

第十三届蓝桥杯A组省赛填空程序真题集

文章目录试题 A: 裁纸刀(填空)试题 B: 寻找整数(填空)试题 C: 求和试题 D: GCD试题 E: 蜂巢试题 F: 全排列的价值试题 G: 青蛙过河试题 H: 因数平方和试题 I: 最优清零方案试题 J: 推导部分和试题 A: 裁纸刀(填空) 本题总分:5 分 【问题描述…

拉格朗日乘子法

拉格朗日乘子法 (Lagrange multipliers)是⼀种寻找多元函数在⼀组约束下的极值的⽅法。 通过引⼊拉格朗⽇乘⼦,可将有 d 个变量与 k 个约束条件的最优化问题转化为具有 d k 个变量的⽆约束优化问题求解。 本⽂希望通过⼀个直观简单的例⼦尽⼒解释拉格朗⽇乘⼦法和…

双闭环直流调速系统matlab/simulink仿真

前些天发现了十分不错的人工智能学习电子书,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记(或csds992022&…

采样与保持仿真实验(计控实验一simulink)

一、实验目的与要求 1、了解数/模转换器的零阶保持器作用。 2、验证零阶保持器在控制系统中的作用。 3、验证采样周期对系统稳定性的影响。 4、学习控制系统计算机辅助设计软件MATLAB及其仿真环境SIMULINK的使用。 二、仿真软硬件环境 PC机,MATLAB R2012b。 三、…

微分与平滑仿真实验(计控实验二simulink)

一、实验目的与要求 1、了解微分对采样噪音的灵敏响应。 2、了解平滑算法抑制噪音的作用。 3、进一步学习MATLAB及其仿真环境SIMULINK的使用。 二、仿真软硬件环境 PC机,MATLAB R2012b。 三、实验原理 如图微分加在正反馈输入端,计算机用D(Z)式进行…

积分分离PID控制仿真实验(计控实验三simulink)

一、实验目的与要求 1、学会PID三个系数的选取。 2、了解积分分离值的模拟实验选取。 3、掌握SIMULINK的仿真方法。 二、仿真软硬件环境 PC机,MATLAB R2012b。 三、实验原理 如图,R为输入,C为输出。计算机不断采入误差E,进行…

数电实验三-点亮四个数码管(Multisim和Basys3)

特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践。 一、实验目的 详见报告 二、实验仪器 详见报告 三、实验内容详解 以16位拨码开关和3个按钮为输入,四个七段式数码管为输出&#xff0…

wso2 esb_使用WSO2 ESB构建制造服务总线(MSB)

wso2 esb在进入本主题之前,我想介绍一些制造业中常用的术语。 制造执行系统(MES)一词是AMR Research在1990年提出的,从先进的制造计算机信息系统的发展到现在,MES概念已经发展了近三十年。 以下是制造执行系统协会&am…

数电实验四-触发器(Multisim和Basys3)

特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践! 一、实验目的 详见报告 二、实验仪器 1.数字电路实验箱 2.器材 三、实验内容详解 1.基本RS触发器逻辑功能的测试 基本RS触发器由两个与…

基于MATLAB的简易音乐数字均衡器设计(不采用MATLAB内置函数实现)

音乐数字均衡器 MATLAB GUI界面 不同MP3播放器的均衡器设置不尽相同,以两个韩系高端品牌iRiver和iAUDIO为例,两者的EQ均衡器同分为5个频段,但是频段的划分并不一样。iRiver的产品EQ分为五段:50Hz档、200Hz档、1KHz档、3KHz档和14KHz档,每段可以进行10级调节:-15dB、-12d…

微信小程序消息推送通知模板id生成获取

前些天发现了十分不错的人工智能学习电子书,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 1、首先在微信公众平台登录对应的微信小程序。然后点击功能…

Windows10+VS2017下GSL1.8_x86和sundials2.5.0配置及GITHUB项目schneider_et_al_2016_animaldiversity编译运行

一、GSL库下载 GSL简介及下载地址:GSL - GNU Scientific Library GSL FTP下载地址:GSL FTP GSL for Windows地址:Gsl for Windows 文件主要有: 以上链接中关于GSL1.8版本的所有文件,均已下载好且打包如下,可直接下载,本文主要分享编译链接过程中遇到的问题,避免看到这…

数电实验五-秒表初步(Multisim和Basys3)

特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践。 一、实验目的 详见报告 二、实验环境 详见报告 三、实验内容详解 基础要求:以Basys3板载的100MHz时钟为输入,4位7段式数码…

数电实验六-秒表进阶(Multisim和Basys3)

特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践。 一、实验目的 详见报告 二、实验环境 详见报告 三、实验内容详解 基础要求:在实验五的基础上,用 BTNC 按键控制秒表的工作…

云原生架构总览,发展定义架构及趋势

随着云计算发展的成熟和企业需求的推动,云原生技术和理念得到了用户的广泛接受,云原生应用场景不断丰富,云原生正在成为云上的必然趋势。 文章目录一、云原生技术发展二、云原生的定义三、云原生应用四、云原生架构原则及常用模式五、云原生未…

最小拍有纹波系统仿真实验(计控实验四simulink)

一、实验目的与要求 1、掌握最小拍有纹波系统的计算机控制脉冲传函D(z)的设计方法。    2、了解该系统对三种典型输入的适应性。 3、掌握SIMULINK的仿真方法。 二、仿真软硬件环境 PC机,MATLAB R2012b。 三、实验原理 如图 R为…

C语言实用算法系列之memcpy、memmove函数原理与实现

直接看代码 #include<stdio.h> #include<string.h> /*返回指向pDest的指针*/ void* MemCopy(void* pDest, const void* pSrc, int nCount) {char* p (char*)pDest;char* p1 (char*)pSrc;while (nCount--)*p *p1;return pDest; } /*返回指向pDest的指针&#xf…