Java - JIT即时编译

news2024/12/24 2:22:43

java前端编译器和后端编译器的作用

  • Java前端编译器:javac 编译,在程序运行前,将 源文件 转化为 字节码 即 .class 文件

  1. Java 程序最初只能通过解释器解释执行,即 JVM 对字节码逐条解释执行,因此执行速度比较慢。

  1. 字节码与平台无关

  • Java后端编译器:JIT 编译,在程序运行期间,将字节码转化为机器码

  1. 机器码与平台相关

JIT 即时编译 Just In Time

当 JVM 发现某个方法或代码块执行特别频繁时,就将其认定为 热点代码(Hot Spot Code)。在程序运行期间,JVM 将这些热点代码编译为与本地平台相关的机器码,并进行各层次的优化,从而提升热点代码的执行效率。

如何检测热点代码(Hot Spot Code):

  • 基于 采样 的热点检测:检查各个线程的栈顶。

  • 基于 计数器 的热点检测:HotSpot 虚拟机采用:
    方法计数器:统计每个方法调用的次数
    回边计数器:统计每个方法中循环体代码执行的次数

JIT的设置及优化

初级调优

HotSpot 虚拟机内置两个 JIT 编译器:

  • 客户模式 Client Compiler,即 C1 编译

  1. 无采样,立即 JIT 编译,轻量优化

  1. JIT 编译的类较多,可能导致代码缓存不够用

  1. 速度较快,适用于短暂的应用程序

  • 服务器模式 Server Compiler,即 C2 编译

  1. 采集一万次调用样本后深度编译优化

  1. JIT 编译的类较少

  1. 启动速度较慢,运行起来后性能逐步提升

  1. 每次 GC,计数器衰减一半

  1. 可以设置 -XX:-UseCounterDelay 来禁止衰减

  • Java 8 支持多层编译,即程序启动时使用 C1 编译,样本足够后使用 C2 编译:

  1. 禁止多层编译:-XX:-TieredCompilation

  1. 启用多层编译:-XX:+TieredCompilation

优化代码缓存

如果缓存过小,有些热点代码可能不会被 JIT 编译。

C1 编译的类较多,可能导致代码缓存不够用。

设置代码缓存大小:-XX:ReservedCodeCacheSize = 32m

编译阈值

即计数器的阈值,默认为10000,即方法计数器和回边计数器的总和达到了10000就触发 JIT 编译。

设置编译阈值:-XX:CompileThreshold = 10000

内联 Inline

将方法的代码复制到发起调用的方法里,以消除方法调用。

因为调用一个小方法可能比直接执行该小方法对应的代码更耗时。

  • -XX:MaxInlineSize=35byte:能被内联的方法最大字节码大小

  • -XX:FreqInlineSize=325byte:频繁调用的方法能被内联的最大字节码大小
    如何让方法更容易被内联:拆分不常访问的路径。例如:

public void f() {
  if(most case) {
    ...
  }
  else {
    ... // 将不常访问的路径的代码拆分到函数 g() 中
    ... // 以降低整体代码的大小,使得 most case 中的代码可以被内联
  }
}

打印 JIT 编译信息

java -XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:PrintInline > a.out

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

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

相关文章

【SAP Abap】SAP Flight 航班系统数据模型简介(SCARR、SPFLI、SFLIGHT、SBOOK等)

SAP Flight 航班系统数据模型简介(SCARR、SPFLI、SFLIGHT、SBOOK等)1、本文目的2、数据模型3、查看模型数据4、生成演示数据5、模型应用1、本文目的 SAP ABAP 系统都会自带 Flight 航班系统数据模型,其大量应用于 SAP ABAP 帮助文档、系统 D…

移动安全总结 2019

声明 本文是学习移动安全总结 2019. 下载地址 http://github5.com/view/1223而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 序言 随着2019年的逝去,二十一世纪第二个十年也已随之结束。回顾过去的十年,我们的生活随着科技的进…

养老院人员定位方案125K芯片AS3933/SI3933/GC3933/PAN3501

随着社会老龄化,高龄化,空巢化和病残化的迅速发展,将使得越来越多的老人住进养老院。虽养老院数量越来越多,但养老院人也越来越多,给现有的养老管理上带来压力,由于服务人员有限,无法及时顾及到…

【LeetCode每日一题】——89.格雷编码

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数学 二【题目难度】 中等 三【题目编号】 89.格雷编码 四【题目描述】 n 位格雷码序列 是一…

举个栗子!Tableau 技巧(249):为文本表中的不同度量设置不同颜色

使用文本表呈现数据时,通常会用颜色的深浅来代表度量的数值大小。单一度量很容易实现,但多个度量的情况,很多数据粉反馈不知道如何实现。 如下示例,在为不同度量设置了不同颜色后,的确既美观又直观。 具体该如何实现呢…

进制转换 2进制转10进制 10进制转2进制

觉得有用的,HXD们请点个赞●▽● 10进制转2进制(以十进制100转换为二进制为例子:) 方法一(除2取余数,倒叙摆列,高位补零 ) 100/250余0; 50/225余0; 25/21…

Allegro174版本新功能介绍之改变菜单字体大小

Allegro174版本新功能介绍之改变菜单字体大小 Allegro在升级到174的时候,默认的字体是非常小的,如下图 看起来十分费劲 启动界面 菜单界面 但是174是支持把把这些字体调大的,具体操作如下 选择Setup

git远程仓库使用流程

git远程仓库使用流程远程仓库使用流程远程仓库介绍远程仓库使用流程如何将本地文件夹关联远程仓库多人开发配置流程远程仓库SSH配置远程仓库使用流程总结git分支使用流程分支介绍1.2-分支使用流程远程仓库使用流程 Git命名作用详细描述git clone克隆远程仓库代码把服务器的项目…

Laravel 开发 API 时的前置准备

前言 使用 Laravel 有一段时间了,今天来总结我平时进行开发前的一些准备工作,如果有不合理的地方或者有更好的建议欢迎各位大佬指出纠正! 环境 PHP8 MySQL5.7 Nginx1.20 IDE:PhpStorm搭建 安装 推荐使用 composer 安装 或者…

舆情监测技术方案,网络舆情分析技术手段有哪些?

网络舆情分析技术手段着力于利用技术实现对海量的网络舆情信息进行深度挖掘与分析,以快速汇总成舆情信息,从而代替人工阅读和分析网络舆情信息的繁复工作,接下来TOOM舆情监测小编带您简单了解舆情监测技术方案,网络舆情分析技术手…

网站服务器运行过程中有哪些常见问题?

网站服务器运行过程中有哪些常见问题?在线业务运转过程中,网站服务器的宕机或无法访问往往会给访客带来极差的用户体验,继而影响到在线业务的品牌声誉及长远发展。下面聊聊关于网站服务器的常见问题,需多加留意。 1.页面加载速度变慢 这是用…

Leetcode:222. 完全二叉树的节点个数(C++)

目录 问题描述: 实现代码与解析: 直接当普通二叉树遍历: 利用完全二叉树和满二叉树的特性: 原理思路: 问题描述: 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的…

js实现纯前端压缩图片

演示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>压缩图片</title> </head> <bo…

php学习笔记-phpday1

php代码基本语法 PHP&#xff08;PHP: Hypertext Preprocessor&#xff09;即“超文本预处理器”&#xff0c;是在服务器端执行的脚本语言&#xff0c;尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言&#xff0c;吸纳Java和Perl多个语言的特色发展出自己的特色语法&…

【自学C++】C++ HelloWorld

C HelloWorld C HelloWorld教程 我们打开 Dev-C 软件&#xff0c;界面如下&#xff1a; 我们选择文件 -> 新建 -> 源代码&#xff0c;如下图所示&#xff1a; 点击源代码之后&#xff0c;此时界面如下图所示&#xff1a; 我们在新建的文件中&#xff0c;输入以下内容&a…

用远见超越未见 | 立足2022,洞见未来之2023十大安全技术趋势

2022年是极不平凡的一年&#xff0c;外部的世界局势逐步恶化&#xff0c;内部的新冠疫情转段迈向新阶段。2022年也是伟大的一年&#xff0c;党的二十大胜利召开。党的二十大报告就“推进国家安全体系和能力现代化&#xff0c;坚决维护国家安全和社会稳定”作出专章部署&#xf…

三万字机器学习项目整理(基础到进阶)

如果你是学生、计算机领域的工作者&#xff0c;我强烈建议你学习、掌握机器学习&#xff0c;我不敢说它是最简单的&#xff08;机器学习的确很简单&#xff09;&#xff0c;但是掌握机器学习一定是性价比最高的。 本文用浅显易懂的语言精准概括了机器学习的相关知识&#xff0…

jQuery(JS库) | 一文带你掌握jQuery的使用

目录 一&#xff1a;开篇基础 1. 为什么使用 jQuery 2. DOM 对象 3. JS对象和 jQuery 对象 4. 获取 jQuery 5. 牛刀小试 6. DOM 对象和 jQuery 对象 二&#xff1a;选择器 1. 基本选择器 2. 表单选择器 三&#xff1a;过滤器 1. 基本过滤器 2. 表单对象属性过滤器…

天津人才引进迁出迁入延期经验分享

由于2022年疫情&#xff0c;集体户口折腾了5个月终于告与段落了&#xff0c;只能说2022年点真得太背了。。。把自己的痛苦经验分享给大家乐乐。。。 迁出找人代办&#xff0c;获得准迁证后&#xff0c;个人证件比准迁证提前将近2天开始邮寄&#xff0c;但最后还比准迁证晚到了1…

做几个链表相关的练习题吧!!

对于链表&#xff0c;笔者在之前就已经有过几篇文章&#xff0c;详细的讲解了&#xff01;感兴趣的各位老铁&#xff0c;请进入博主的主页进行查找&#xff01;https://blog.csdn.net/weixin_64308540/?typeblog言归正传&#xff01;对于链表&#xff0c;光学不做&#xff0c;…