Java学习笔记:JIT

背景

JIT是Just In Time compiler的简称,是JVM的重要一部分。说到JIT就不得不提Java的bytecode。Java的一大优势就是一次编译之后可以运行在所有平台上。Java之所以对平台可以做到neutrual是因为所有的Java代码是首先被编译成bytecode,即我们所熟悉.class文件。然后运行时载入JVM,由JVM来解释(interpret)成机器码(机器码是跟平台相关的)由处理器运行。一般JVM解释bytecoded的操作大概就是看到一串代码就把它变成相对应的机器码。这样按照bytecode一步步执行下去,这样的机械性操作存在一定的可优化空间。

工作原理

JIT的基础是compile,这里compile的意思是,不同于普通的interpretation,compiler有更多的代码上下文,一步一步把bytecode进行不同层次的操作,并可以根据上下文来对生成机器码进行优化。例如,一个本地变量被初始化之后没有任何使用。compiler就直接把它给删掉了,在生成的机器码里这个变量不会出现的。其实compile跟优化密不可分,其实compile的过程就是对目前已知的代码特性进行优化。再进一步这里其实非常的intuitive。有个叫code cache的东西,把compile出来的机器码cache起来,下次要用到的时候直接invoke就好了。最后可以对代码进行渐进式的分析-code data profiling。分析代码里面的hotspot,根据分析的结果来决定到底要不要优化以及怎样优化。

种类

  • client-compiler。这种compiler是主要跑在客户端本地的。特点是使用资源少启动快速。
  • server-compiler。跑在服务器上,因为服务器上程序本身是长时间运行的,而且对启动时间没有严格的要求。那么就可以牺牲启动时间获得深度的优化。
  • tiered-compiler。这种compiler是两者的结合体。在启动之初用client的方案,并且收集数据。随着时间的推移,使用服务器的解决方案并使用之前收集的数据。这样做可以充分利用二者各自的优势,实现最佳的优化结果。
    一般而言,client-compiler会提升大概五到十倍的运行效率。server-compiler比client-compiler提升百分之五十左右,但是需要以更多的资源作为代价。

Caveat

JIT其实不是说一定就会有帮助,比如一段代码只被执行了一次,你cache它也是没什么用处的,而且会白白浪费资源。所以JIT在设计的时候大部分是个权衡的过程,根据经验(其实就是data)来决定要不要优化。最终的运行结果也不是一定会提高效率,因为我们需要把compile的cpu和内存的消耗考虑进去。再没有compile的情况下,我们是不需要使用这些资源的。

常见的优化

举几个例子来加深理解。其实JIT的核心就是分析代码,优化运行效率。一方面是,代码可能写的不够最优,由JIT代替程序员做一些优化。另一方面是,程序代码本身没问题,但是cpu和内存的操作可以进一步优化,这些程序员并不知道,由JIT来帮程序员做了。

  • 未使用和去重。就是检查一下代码上下文,删一删。
  • loop。这个主要是优化方式是减少程序运行指针的jump操作。优化方案有把loop展开,这样不用跳转顺序执行即可;用if加do while代替while,感觉这样操作只解决了一个特殊情况,且增加了复杂度,并没什么必要。
  • inline。这个操作应该是JIT的核心之一。解决的问题还是指针跳转和机器码重用。具体操作就是把常用的代码段对应机器码直接插入到caller那里。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容