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

1.CPU相关代码

1.1.Advanced Vector Extensions

1.1.1.AVX

1.1.2.2013年,Intel为Haswell以及之后的芯片引入了AVX2

1.1.3.2016年,Intel又引入了AVX-512指令

1.1.4.JDK 8不支持这些指令

1.1.5.JDK 11支持

1.2.-XX:UseAVX=N

1.2.1.0

1.2.1.1.不使用AVX指令

1.2.2.1

1.2.2.1.使用Intel AVX 1指令(对于Sandy Bridge和之后的处理器)

1.2.3.2

1.2.3.1.使用Intel AVX 2指令(对于Haswell和之后的处理器)

1.2.4.3

1.2.4.1.使用Intel AVX-512指令(对于Knights Landing和之后的处理器)

1.3.-XX:UseSSE=N

1.3.1.支持Intel流SIMD扩展1到4

1.3.1.1.Streaming SIMD Extensions,SSE

1.3.2.针对奔腾系列处理器的

2.分层编译的权衡

2.1.当在内存受限的环境中运行时有理由关闭它

2.2.给定足够长的预热期,禁用分层编译时的执行情况和开启时应该是差不多的

2.3.javac编译器

2.3.1.包含额外调试信息的-g标志不会影响性能

2.3.2.在Java应用程序中使用final关键字并不能更快地编译代码

2.3.3.用较新的javac版本重新编译通常不会使应用程序更快

2.3.3.1.JDK 11引入了一种新的字符串连接方式,可以比以前的版本更快,但需要重新编译代码才能用

3.GraalVM

3.1.一个新的虚拟机

3.1.1.可以运行许多其他语言的代码

3.2.两个版本

3.2.1.完全开源的社区版(Community Edition,CE)

3.2.1.1.社区版比企业版慢

3.2.2.商用的企业版(Enterprise Edition,EE)

3.3.对JVM性能有两个重要贡献

3.3.1.插件技术允许GraalVM生成完全原生的二进制文件

3.3.2.以常规JVM的模式运行,只是它包含了一个新的C2编译器实现

3.3.2.1.这个编译器是用Java写的

3.3.2.2.传统的C2编译器是用C++写的

3.4.-XX:+UnlockExperimentalVMOptions

3.4.1.默认值是false

3.5.-XX:+EnableJVMCI

3.5.1.默认值是false

3.6.-XX:+UseJVMCICompiler

3.6.1.默认值是false

4.提前编译

4.1.ahead-of-time compilation,简称AOT compilation

4.2.最初仅在JDK 9的Linux版本中可用

4.2.1.JDK 11时所有平台都可以用了

4.3.启动速度更快

4.3.1.目前,应用程序类数据共享给启动性能带来的提升更大,而且它已经是平台完全支持的特性

4.3.2.提前编译针对的是像REST服务器这样启动时间相对比较长的程序

4.3.2.1.加载共享库的时间就被较长的启动时间抵消了,提前编译就更有优势

4.4.jaotc工具

4.4.1.生成一个共享库,其中包含你选出的编译过的类

4.4.2.然后通过运行参数将共享库加载到JVM中

$ java -XX:+UnlockDiagnosticVMOptions -XX:+LogTouchedMethods \

      -XX:+PrintTouchedMethodsAtExit <other arguments>

java/net/URI.getHost:()Ljava/lang/String;

4.4.5.为了生成methods.txt文件,需要保存这些输出内容,然后在每一行前添加compileOnly命令并删除方法参数之前的冒号

$ jaotc --compile-commands=/tmp/methods.txt \

    --output JavaBaseFilteredMethods.so \

    --compile-for-tiered \

    --module java.base

4.4.7./tmp/methods.txt文件中

compileOnly java.net.URI.getHost()Ljava/lang/String;

4.5.如果不让预编译的方法被C2编译器编译,那么服务器预热后的性能就会比它最终可能达到的性能差

4.6.-XX:+PrintAOT

4.6.1.在预编译方法被JVM使用时会产生输出

4.6.2.默认值是false

4.7.对于比较大的程序有好处

4.8.对于很小的、快速运行的程序没有帮助,甚至会阻碍它们的运行

5.GraalVM原生编译

5.1.生成不需要JVM的可执行文件

5.1.1.是短期程序的理想选择

5.2.生成的二进制文件启动速度很快,特别是相较于在JVM中运行的程序

5.3.GraalVM优化代码时并没有C2编译器那么激进,所以对于运行得足够久的应用程序,传统的JVM最终会胜出

5.4.GraalVM原生二进制文件在执行期间不会使用C2编译器编译类

5.5.原生程序的内存占用在开始时比传统JVM少得多

5.5.1.随着程序的运行和堆的增长,这种内存优势会逐渐消失

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

推荐阅读更多精彩内容