JIT(just in time)即时编译器

JIT(just in time)

前端vs后端

在编译原理中,通常将编译分为前端和后端。其中前端会对程序进行词法分析、语法分析、语义分析,然后生成一个中间表达形式(称为IR:Intermediate Representation)。后端再讲这个中间表达形式进行优化,最终生成目标机器码。

在Java中,javac之后生成的就是中间表达形式(.class)

JVM在执行时,首先会逐条读取IR的指令来执行,这个过程就是解释执行的过程。当某一方法调用次数达到即时编译定义的阈值时,就会触发即时编译,这时即时编译器会将IR进行优化,并生成这个方法的机器码,后面再调用这个方法,就会直接调用机器码执行,这个就是编译执行的过程。

字节码-->机器码:
  1. 用的时候直接翻译(解释器)
  2. 用的时候直接翻译,并把常用的方法等缓存起来,下次再用的时候直接取用(CodeCache)

可以通过java -XX:+PrintFlagsFinal打印出所有参数的默认值

参考

  1. JVM系列之走进JIT
  2. 为什么 JVM 不用 JIT 全程编译?
  3. JVM杂谈之JIT
  4. 深入理解Java即时编译器(JIT)-上篇
  5. 深入理解Java即时编译器(JIT)-下篇

原文地址:https://www.cnblogs.com/shengulong/p/11795642.html

时间: 2024-10-15 10:30:25

JIT(just in time)即时编译器的相关文章

.NET、C#和ASP.NET,ASP.NET MVC 四者之间的区别

from:http://www.cnblogs.com/wwym/p/5555772.html 经常,会有一些人搞不清楚.NET和c#和ASP.NET这三者之间的关系,她们都是什么呢?他们之间有什么关系呢?今天我简单给大家总结一下吧. 首先:什么是.NET? .NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(.NET框架)是.NET程序开发和运行的环境,在这个平台下可以用不同的语言进行开发,因为.NET是跨语言的一个平台.语言可以是C#,f#,j#,vb.net等等

JVM总结(六):晚期(运行期)优化

这节我们总结一下JVM运行期的优化问题. JVM运行期优化 即时编译器(JIT) 编译对象与触发条件 编译对象 触发条件 编译过程 编译优化技术 JVM运行期优化 Java程序在运行的期间,可能会有某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”.为了提高热点代码的执行效率,在运行时JVM会将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT编译器). 即时编译器(JIT) 事实上

Android官方开发文档Training系列课程中文版:性能优化建议

原文地址:http://android.xsoftlab.net/training/articles/perf-tips.html 本篇文章主要介绍那些可以提升整体性能的微小优化点.它与那些能突然改观性能效果的优化手段并不属于同一类.选择正确的算法与数据结构必然是我们的第一总则,但是这不是我们这篇文章要介绍的.你应该将这篇文章所提及的知识点作为编码的日常习惯,这可以提升常规代码的执行效率. 下面是书写代码的基本准则: 绝不要做你不需要的工作. 如果可以不申请内存就不要申请,要合理复用已有的对象.

class文件的编译过程

编译器主要分为3类:前端编译器.JIT编译器.AOT编译器 前端编译器:把*.Java文件转变成*.class文件--Sun的Javac JIT编译器:就是即时编译器,将class文件转变成机器码的过程--HotSpotVM的C1.C2 AOT编译器:直接把*.java文件编译成本地代码的过程--Excelsior JET Javacde 编译过程主要分为以下3种 ①解析与填充符号的过程 1.词法.语法分析 词法分析是将源代码的字符流转变为标记集合(单个字符是程序编写过程的最小元素.而标记则是编

s2.深入.Net

深入.NET编程1.深入.NET框架   复习+++复习+复习   类图 自动属性 2.类:是对象的虚例,类是对象的集合,类是对象的模板.        对象是类的实例. 0到多个. 3.Linux  李纳斯     Wince  :地铁进站闸机 超市里面 :windows PDA 4.MS  SQL Server    5..NET  DOTNET DNET 点NET 任何人,在任何地方,使用任何终端设备,都能访问微软提供的服务. 6..NET Framwork                

.Net FrameWork概述

.Net FrameWork 是为其运行的应用程序提供各种服务的托管执行环境,它包括两个组件,执行引擎公共语言运行时(CLR):以及.Net FrameWork 类库. CLR是.NET FrameWork 的核心, CLR的核心是CTS和CLS,任何编程语言,如果想要在.NET CLR上执行,就必须提供一个编译器, 编译成.NET CLR所认识的metadata以及IL,符合CTS的规定. CTS 是通用类型系统(Common Type System) CLS是公共语言定义(Common La

Flutter + Android 混合开发

JIT (Just In Time) 即时编译器, 边执行边编译 程序运行时,JIT 编译器选择将最频繁执行的方法编译成本地代码.运行时才进行本地代码编译而不是在程序运行前进行编译 AOT可以理解为“全时段的编译”(All-Of-the-Time compilation).即在安装的时候,就把所有的运行代码都编译到本地,这样在运行时就可以直接执行机器代码 Android N引入了一种包含编译.解释和JIT(Just In Time)的混合运行时,以便在安装时间.内存占用.电池消耗和性能之间获得最

.net和ASP.net,c#的区别

.NET.C#和ASP.NET三者之间的区别如下: 一.什么是.NET?.NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(.NET框架)是.NET程序开发和运行的环境,在这个平台下可以用不同的语言进行开发,因为.NET是跨语言的一个平台.语言可以是C#,f#,j#,vb.net等等.JAVA和.NET不同的一点是java是跨平台的,不跨语言的..NET跨平台仅限于安卓系统和IOS苹果系统. 1.net框架的组成分为两部分:CLR:公共语言运行时(Common Lan

深入理解java虚拟机(十三) Java 即时编译器JIT机制以及编译优化

在部分的商用虚拟机中,Java 程序最初是通过解释器( Interpreter )进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为"热点代码".为了提高热点代码的执行效率,在运行时,即时编译器(Just In Time Compiler )会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化. 1.HotSpot 内的即时编译器 解释器和编译器各有各的优点: 解释器优点:当程序需要迅速启动的时候,解释器可以首先发挥作用,省去了编译的时间,