读Java性能权威指南(第2版)笔记08_即时编译器中

读Java性能权威指南(第2版)笔记08_即时编译器中.png

1. 编译阈值

1.1. 一旦代码执行到一定次数,就达到了它的编译阈值,编译器就会认为它有足够的信息来编译代码

1.2. 在当前的JVM中,优化阈值的意义不大

1.2.1. 从JDK 7以及更早期遗留下来的

1.3. -XX:CompileThreshold=N

1.3.1. 当禁用分层编译时有效

1.3.2. 默认值是10 00

1.3.3. 降低这个标志的值可以改善使用C2编译器的应用程序的启动时间

1.3.3.1. 可能会导致一些方法被编译,而这些方法本来是永远都不会被编译的

1.4. 编译器使用的计数器会随着方法和循环的执行增加计数,但是它们也会随着时间的推移而减少

1.4.1. 计数器只是方法或循环最近热度的相对度量

1.4.2. 有些频繁执行的代码可能永远不会被C2编译器编译,即使这个程序永远运行

1.5. -XX:Tier3InvocationThreshold=N

1.5.1. 默认值200

1.5.2. 让C1编译器更快地编译方法

1.6. -XX:Tier4InvocationThreshold=N

1.6.1. 默认值5000

1.6.2. 让C2编译器更快地编译方法

2. 编译线程

2.1. 调用次数更多的方法有更高的优先级

2.1.1. 可以确保最重要的方法先被编译

2.2. 需要编译的代码会放在编译队列中

2.2.1. 队列中的代码越多,应用程序达到最佳性能需要的时间就越长

2.3. C1编译器和C2编译器有不同的队列

2.3.1. 对于放在编译队列中的方法,编译是异步进行的

2.4. -XX:CICompilerCount=N

2.4.1. JVM用来处理队列的总线程数

2.4.2. 三分之一(至少一个)用来处理C1编译器队列

2.4.3. 剩下的线程(也是至少一个)用来处理C2编译器队列

2.4.4. 如果分层编译被禁用,则只启动给定数量的C2编译器线程

2.5. 在Docker容器中运行旧版本的JDK 8会导致自动优化出问题

2.5.1. 需要手动将此标志设置为需要的值

2.6. 可用的CPU有限,较少的线程竞争系统资源对性能有益

2.6.1. 减少线程数量可以帮助提升整体吞吐量

2.6.2. 代价是预热期会持续更长时间

2.7. -XX:+BackgroundCompilation

2.7.1. 默认值为true

2.7.1.1. 意味着队列会进行异步处理

2.7.2. 设置为false

2.7.2.1. 一旦方法可以被编译,想要执行它的代码就会等待,直到方法实际上完成编译,而不是继续在解释器中执行

2.8. -Xbatch

2.8.1. 可以禁用后台编译

3. 内联

3.1. 对性能提升非常重要

3.1.1. 编译器能做的最有利的优化,特别是对于属性封装良好的面向对象代码

3.1.2. 不要害怕小方法,特别是getter和setter,因为它们很容易被内联

3.2. -XX:-Inline

3.2.1. 默认启用

3.3. -XX:MaxFreqInlineSize=N

3.3.1. 频繁内联

3.3.2. 默认325字节

3.3.3. 一个方法因为调用得很频繁而可以被内联,那么只有在它的字节码小于325字节时

3.4. -XX:MaxInlineSize=N

3.4.1. 正常内联

3.4.2. 默认35字节

3.4.3. 只有在字节码小于35字节时,方法才会被内联

3.4.4. 它可能会缩短测试所需的预热时间,但是不太可能对一个长期运行的应用程序产生很大影响

3.5. 注意事项

3.5.1. 将MaxInlineSize的值设置为大于35字节,意味着一个方法在首次调用时可能就被内联了

3.5.2. 如果方法经常被调用,就说明它的性能重要得多,它总归是会被内联的(假设它小于325字节)

4. 逃逸分析

4.1. 编译器能够进行的最复杂的优化

4.1.1. 常导致微基准测试出错

4.1.2. 可以产生更快的代码,但复杂循环结构和大型方法限制了有效性

4.2. -XX:+DoEscapeAnalysis

4.2.1. 默认值是true

4.2.2. C2编译器会进行大幅度的优化

4.2.3. 在极少数情况下,它会出错

4.2.4. 禁用这个特性可能会带来更稳定的代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容