当前位置: 首页 > news >正文

Java即时编译器(JIT)的原理及在美团的实践经验

基本功 | Java即时编译器原理解析及实践 - 美团技术团队

这篇文章由美团AI平台/搜索与NLP部的珩智、昊天、薛超撰写,深入介绍了Java即时编译器(JIT)的原理及在美团的实践经验。

  1. Java执行过程与即时编译器概述
    • Java执行过程:Java先由javac编译成字节码(前端编译),再由解释器逐条解释执行。执行中,虚拟机收集程序运行信息,编译器对热点代码(方法或代码块调用次数超阈值)进行后端编译,将字节码转为机器码存入codeCache,下次执行直接读取,提升性能。
    • JVM中的编译器:集成Client Compiler(C1)和Server Compiler。C1注重启动速度和局部优化,将字节码转为HIR再到LIR生成机器码;Server Compiler关注全局优化,性能更好但启动慢,包括C2和Graal。C2用Ideal Graph优化,Graal在分支预测等激进优化上表现更优,对Java新特性友好,从JDK 9集成,可通过特定参数启用替换C2。
    • 分层编译:Java 7引入,结合C1和C2优势,将JVM执行状态分五层,JVM根据服务运行情况选择编译路径,从解释执行开始,到达终止状态(1层和4层)停止编译请求。JDK 8默认开启分层编译。
    • 即时编译的触发:Java虚拟机根据方法调用次数和循环回边执行次数触发即时编译。分层编译时,触发条件基于特定参数和系数动态判断,JVM会调整系数 。
  1. 编译优化技术
    • 中间表达形式:Java字节码是一种IR,但现代编译器常用图结构的IR,如SSA IR。C1使用HIR和LIR(均为SSA形式)优化,C2的Ideal Graph采用Sea-of-Nodes IR(SSA形式),通过Phi Nodes解决不同路径变量赋值问题,GVN利用这种结构简化等价计算优化。
    • 方法内联:编译时将目标方法体纳入编译范围取代原调用,减少方法调用开销,是JIT重要优化手段。内联有条件限制,可通过参数调整内联层数。虚函数内联较难,C2对部分虚调用可优化,Graal通过收集信息提升多实现虚调用的执行效率。
    • 逃逸分析:确定对象指针动态范围,判断对象是否逃逸出线程或方法,基于此可进行锁消除、栈上分配和标量替换优化。Graal还进行部分逃逸分析,在部分路径优化。
    • Loop Transformations:C2编译器对循环进行优化,循环展开通过减少循环指令提升速度,循环分离将特殊迭代分离减少开销 。
    • 窥孔优化与寄存器分配:窥孔优化替换相邻指令为高效指令组,寄存器分配将频繁使用变量存于寄存器提升速度,二者是编译优化最后一步,之后生成机器码存入codeCache。
  1. 实践经验
    • 编译相关重要参数:如开启分层编译、设置编译线程数、各层编译阈值、codeCache大小等参数,一般不建议手动调整,特定情况(如codeCache满、方法未内联影响性能)可调整。
    • 通过JITwatch分析编译日志:添加特定参数输出编译日志,用JITwatch工具分析,可查看项目Java Class、编译时间轴、代码优化建议、逃逸分析优化结果等信息。
    • 使用Graal编译器:用特定参数可启用Graal编译器代替C2,它与G1搭配使用,在美团线上服务中,启用后TP9999下降,峰值性能提升,但启动时性能差。可通过静态编译提升启动速度,但GraalVM的垃圾回收性能欠佳,对Java部分特性支持不足,仍需调研。
  1. 总结:JIT技术已较成熟,在Java服务中JVM已做很多优化,但深入了解其原理和新技术,有助于进一步提升Java服务性能。

相关文章:

Java即时编译器(JIT)的原理及在美团的实践经验

基本功 | Java即时编译器原理解析及实践 - 美团技术团队 这篇文章由美团AI平台/搜索与NLP部的珩智、昊天、薛超撰写,深入介绍了Java即时编译器(JIT)的原理及在美团的实践经验。 Java执行过程与即时编译器概述 Java执行过程:Java…...

使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来,大语言模型(LLM)的应用逐渐成为技术热点,而 DeepSeek 作为国产开…...

算法基础之八大排序

文章目录 概要1. 冒泡排序(Bubble Sort)2. 选择排序(Selection Sort)3. 插入排序(Insertion Sort)4. 希尔排序(Shell Sort)5. 归并排序(Merge Sort)6. 快速排…...

使用TensorFlow和Keras构建卷积神经网络:图像分类实战指南

使用TensorFlow和Keras构建卷积神经网络:图像分类实战指南 一、前言:为什么选择CNN进行图像分类? 在人工智能领域,图像分类是计算机视觉的基础任务。传统的机器学习方法需要人工设计特征提取器,而深度学习通过卷积神经…...

音频进阶学习十一——离散傅里叶级数DFS

文章目录 前言一、傅里叶级数1.定义2.周期信号序列3.表达式DFSIDFS参数含义 4.DFS公式解析1)右边解析 T T T、 f f f、 ω \omega ω的关系求和公式N的释义求和公式K的释义 e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N−2πkn​)的释义 ∑ n 0 N − 1 e…...

20.<Spring图书管理系统①(登录+添加图书)>

PS:关于接口定义 接口定义,通常由服务器提供方来定义。 1.路径:自己定义 2.参数:根据需求考虑,我们这个接口功能完成需要哪些信息。 3.返回结果:考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…...

关于图像锐化的一份介绍

在这篇文章中,我将介绍有关图像锐化有关的知识,具体包括锐化的简单介绍、一阶锐化与二阶锐化等方面内容。 一、锐化 1.1 概念 锐化(sharpening)就是指将图象中灰度差增大的方法,一次来增强物体的轮廓与边缘。因为发…...

Django开发入门 – 0.Django基本介绍

Django开发入门 – 0.Django基本介绍 A Brief Introduction to django By JacksonML 1. Django简介 1) 什么是Django? 依据其官网的一段解释: Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. …...

多智能体协作架构模式:驱动传统公司向AI智能公司转型

前言 在数字化浪潮的席卷下,传统公司的运营模式正面临着前所未有的挑战。随着市场竞争的日益激烈,客户需求的快速变化以及业务复杂度的不断攀升,传统公司在缺乏 AI 技术支撑的情况下,暴露出诸多痛点。在决策层面,由于…...

CentOS服务器部署Docker+Jenkins持续集成环境

一、准备工作 一台运行 CentOS 的服务器,确保有足够的磁盘空间、内存资源,并且网络连接稳定。建议使用 CentOS 7 或更高版本,本文以 CentOS 7 为例进行讲解。 拥有服务器的 root 权限,因为后续安装软件包、配置环境等操作需要较…...

【prompt实战】AI +OCR技术结合ChatGPT能力项目实践(BOL提单识别提取专家)

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 1. 需求背景 2. 目标 3. BOL通用处理逻辑…...

【Android】Android开发应用如何开启任务栏消息通知

Android开发应用如何开启任务栏消息通知 1. 获取通知权限2.编写通知工具类3. 进行任务栏消息通知 1. 获取通知权限 在 AndroidManifest.xml 里加上权限配置&#xff0c;如下。 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android…...

上传文件报错:the request was rejected because no multipart boundary was found

后端使用的springboot的MultipartFile上传文件&#xff0c;接口使用apifox调试过没有问题&#xff0c;但前端调接口报错。前端使用了fetch发送formData数据。 the request was rejected because no multipart boundary was found 前端使用的请求头是 multipart/form-data 没有…...

大模型—Dify本地化部署实战

Dify本地化部署实战 系统要求 安装 Dify 之前, 请确保你的机器已满足最低安装要求: CPU >= 2 CoreRAM >= 4 GiB本地部署 开始前先简单介绍下部署Dify需要用到的组件,稍微有点多,但放心,有Docker你怕啥? 关系数据库:postgres缓存:Redis向量数据库:支持weaviate…...

功能架构元模型

功能架构的元模型是对功能架构进行描述和建模的基础框架,它有助于统一不同团队对系统的理解,并为系统的设计和开发提供一致的标准和规范。虽然具体的元模型可能因不同的应用领域和特定需求而有所差异,但一般来说,功能架构的元模型可以涵盖以下几个方面: 组件/模块元模型:…...

常用工具类——Collections集合框架

常用工具类——Collections集合框架 Collections 是 JDK 提供的一个工具类&#xff0c;提供了一系列静态方法&#xff0c;分类来复习&#xff01; 1.排序操作 reverse(List list) :反转顺序shuffle(List list) &#xff1a; 洗牌&#xff0c;将顺序打乱sort(List list) &…...

e2studio开发RA2E1(9)----定时器GPT配置输入捕获

e2studio开发RA2E1.9--定时器GPT配置输入捕获 概述视频教学样品申请硬件准备参考程序源码下载选择计时器时钟源UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()printf输出重定向到串口定时器输入捕获配…...

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂&#xff0c;其末端执行器的位置可以表示为&#xff1a; 其中&#xff1a; L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…...

网络爬虫js逆向之异步栈跟栈案例

【注意&#xff01;&#xff01;&#xff01;】 前言&#xff1a; 1. 本章主要讲解js逆向之异步栈跟栈的知识&#xff08;通过单步执行调试&#xff09; 2. 使用关键字搜定位加密入口 3. 本专栏通过多篇文章【文字案例】的形式系统化进行描述 4. 本文章全文进行了脱敏处理 5. 详…...

使用Ollama本地部署deepseek

1、下载安装Ollama 前往下载页面 https://ollama.com/download下载好安装包&#xff0c;如同安装软件一样&#xff0c;直接安装即可 win中默认为C盘&#xff0c;如果需要修改到其他盘&#xff0c;查找具体教程 运行list命令&#xff0c;检查是否安装成功 2、修改模型下载的…...

AI 模型部署中的内存瓶颈

AI模型部署中的内存瓶颈&#xff1a;挑战与优化 随着AI技术的快速发展&#xff0c;大型神经网络模型&#xff08;如GPT、ResNet等&#xff09;在各类应用中大放异彩。模型部署过程中面临的内存瓶颈问题却成为制约其广泛应用的关键因素。无论是边缘设备还是云端服务器&#xff…...

AI原生应用领域链式思考的实践经验分享

AI原生应用领域链式思考的实践经验分享 关键词&#xff1a;链式思考&#xff08;Chain of Thought&#xff09;、AI原生应用、大语言模型、提示工程、智能推理 摘要&#xff1a;本文结合实际开发经验&#xff0c;深入解析“链式思考&#xff08;CoT&#xff09;”在AI原生应用中…...

2条普通程序员的靠谱出路:AI开发与出海SEO,让AI成为你的助力而非威胁

文章分析了适合普通程序员的两种新出路&#xff1a;转型AI开发和出海做SEO。这两种路径均满足三大条件&#xff1a;市场空间大、AI能赋能工作、有标准执行路径。AI开发是配合业务团队开发AI工作流&#xff0c;可通过前端专精→涉猎AI应用开发→魔改开源项目逐步转型。出海SEO则…...

Ring-1T-FP8开源:万亿参数AI推理新突破

Ring-1T-FP8开源&#xff1a;万亿参数AI推理新突破 【免费下载链接】Ring-1T-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ring-1T-FP8 导语&#xff1a;近日&#xff0c;开源社区迎来重大突破——万亿参数级大语言模型Ring-1T-FP8正式开源&#xff…...

马吕斯定律在现代光学技术中的关键应用解析

1. 马吕斯定律&#xff1a;偏振光世界的"交通规则" 想象一下你戴着偏光太阳镜站在湖边&#xff0c;神奇的事情发生了——水面刺眼的反光突然消失了&#xff01;这背后正是马吕斯定律在发挥作用。这个由法国物理学家马吕斯在19世纪初发现的规律&#xff0c;本质上描述…...

视频生成技术新范式:Wan2.2如何重新定义AI创作边界

视频生成技术新范式&#xff1a;Wan2.2如何重新定义AI创作边界 【免费下载链接】Wan2.2-Animate-14B 项目地址: https://ai.gitcode.com/hf_mirrors/Wan-AI/Wan2.2-Animate-14B 在数字内容创作领域&#xff0c;视频生成技术正经历着从实验性探索到产业化应用的关键转型…...

5个高效步骤掌握MOOTDX数据接口:构建专业金融分析系统指南

5个高效步骤掌握MOOTDX数据接口&#xff1a;构建专业金融分析系统指南 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX作为一款专为Python开发者设计的通达信数据接口封装库&#xff0c;通过…...

OpenFly实战:如何用无人机视觉语言导航工具链快速生成10万条训练数据

OpenFly实战&#xff1a;无人机视觉语言导航数据生成的10倍效率革命 当无人机开始理解人类语言指令时&#xff0c;一场人机交互的革命正在悄然发生。去年在深圳某科技园区&#xff0c;一组工程师仅用72小时就完成了过去需要三个月的数据采集工作——他们使用的秘密武器正是Open…...

LIME算法实战:用Python手把手教你解释黑盒模型(附葡萄酒分类案例)

LIME算法实战&#xff1a;用Python手把手教你解释黑盒模型&#xff08;附葡萄酒分类案例&#xff09; 在机器学习项目落地过程中&#xff0c;算法工程师常面临这样的困境&#xff1a;模型指标表现优异&#xff0c;但业务方始终对预测结果持怀疑态度。这种"黑盒焦虑"在…...

华大单片机实战:MT25QL128/256 FLASH驱动避坑指南(HOLD引脚必看)

华大单片机深度实战&#xff1a;MT25QL系列FLASH驱动设计与HOLD引脚关键配置解析 在嵌入式存储解决方案中&#xff0c;NOR Flash因其高可靠性和快速随机读取特性&#xff0c;成为众多工业级应用的首选。MT25QL系列作为美光推出的高性能SPI NOR Flash产品&#xff0c;凭借其宽电…...