首页 > 编程语言 >Java JIT小记

Java JIT小记

时间:2022-11-30 12:13:00浏览次数:70  
标签:Java 阈值 编译器 XX 编译 JIT 分层 小记 Compiler

来自这篇文章的小总结。

 

 

Java程序的大致执行流程:

 

两类即时编译器,对比:

Client Compiler:启动快、运行慢(因为只注重简单的局部编译优化),例如HotSpot虚拟机的 C1 Compiler。适合客户端程序。

Server Compiler:启动慢、运行快(进行全局的编译优化),例如Hotspot虚拟机中的 C2 Compiler、Graal Compiler(JDK9起),默认为前者。适合长时间运行或对峰值性能要求高的后台程序。性能通常比Client Compiler高30%以上。

Graal是用Java写编译器,与ZGC垃圾收集器不兼容,只能与G1收集器搭配使用。

Tier Compiler(分层编译):JDK7开始引入分层编译的概念,即C1、C2综合使用,以追求启动和执行效率两者的平衡。JDK8起默认开启分层编译。

JVM会统计方法或循环等代码块的执行次数,当达到设置的阈值时会进行即时编译。

非分层编译时由参数-XX:CompileThreshold指定阈值(使用C1时,默认值为1500;使用C2时,默认值为10000)

分层编译时触发条件: i > TierXInvocationThreshold * s || (i > TierXMinInvocationThreshold * s && i + b > TierXCompileThreshold * s) i为调用次数,b是循环回边次数 

当然,作为编译器,即时编译做的事并不仅仅是将字节码转为机器码,在转成机器码前还会做通常编译器所做的 【去除dead code、表达式免重复计算、方法内联、逃逸分析(及基于逃逸分析的锁消除、栈上分配以及标量替换)、Loop Transformations、窥孔优化与寄存器分配】等各种优化。

JVM即时编译器主要参数:

-XX:+TieredCompilation:开启分层编译,JDK8之后默认开启
-XX:+CICompilerCount=N:编译线程数,设置数量后,JVM会自动分配线程数,C1:C2 = 1:2
-XX:TierXBackEdgeThreshold:OSR编译的阈值
-XX:TierXMinInvocationThreshold:开启分层编译后各层调用的阈值
-XX:TierXCompileThreshold:开启分层编译后的编译阈值
-XX:ReservedCodeCacheSize:codeCache最大大小
-XX:InitialCodeCacheSize:codeCache初始大小

 

 

标签:Java,阈值,编译器,XX,编译,JIT,分层,小记,Compiler
From: https://www.cnblogs.com/z-sm/p/16938024.html

相关文章

  • java学习笔记DOM4J解析(7)
    DOM4J即DocumentObjectModelforJava使用java技术以文档方式解析XML数据的模型。DOM4J是开源组织提供的一个免费的、强大的XML解析工具,如果开发者需要在项目中使用那么需......
  • Java学习笔记XML(3)
    XML简介XML即可扩展的标记语言。因此该语言中所有的标签都是没有预先定义的,开发者可以自己随意的指定。目前为止所有的标记的语言都属于开源的语言。由W3C组织进行一个基本......
  • Java中将double转换为int
    可以通过三种方式将double转换为int1、将double转换为int—使用类型转换2、将double转换为int—使用Math.round()3、将double转换为int—使用Double.IntValue()1.......
  • 你必须要知道的JavaScript数据结构与面试题解答
    英文原文|https://dev.to/educative/7-javascript-data-structures-you-must-know-4k0m原文作者|RyanThelin和AmandaFawcett译文翻译|web前端开发(web_qdkf)解决编码......
  • 如何使用函数式编程写更简洁的JavaScript代码
    英文| https://dev.to/r0r71z/javascript-write-cleaner-code-with-functional-programming-279a翻译|web前端开发(ID:web_qdkf)作为一个Web全栈开发人员,我花了很多时间......
  • 从零启动一个JAVA SSM项目详细步骤目录
    详解大型互联网项目服务端架构演进历程JAVA环境配置​​1、Linux软件源配置操作​​​​2、Linux系统jdk安装实操​​​​3、Linux系统tomcat安装​​​​4、Linux下Maven......
  • 这8个很棒的JavaScript测试库,你可以尝试用起来
    英文| https://medium.com/better-programming/8-awesome-javascript-testing-libraries-43e09141fdc2翻译|web前端开发(ID:web_qdkf)测试代码是任何大型公司或项目的强......
  • JavaScript入门①-基础知识筑基
    01、JavaScript基础知识JavaScript(缩写:JS)是一种具有面向对象能力的、解释型的程序语言,基于对象和事件驱动,具有相对安全性的客户端脚本语言。JavaScript是一门完备的动态......
  • java base64转图片
    方法:传入文件路径和base64位的编码/***base64转为图片*@parampath*文件路径:到文件夹即可,代码里会在文件夹里生成对应的jpg文件*@pa......
  • 10个 JavaScript 开发小技巧
    英文| https://www.geeksforgeeks.org/javascript-top-10-tips-and-tricks/?ref=rp翻译|web前端开发(ID:web_qdkf)对于Web开发或跨平台开发,JavaScript越来越流行。以前,它......