定位 Javac 编译速度慢的 JDK bug

发布于:2024-10-24 编辑:匿名 来源:网络

背景 Flink 提供了 Tuple0 ~ Tuple25 的 Tuple 类供用户选择。顾名思义,每个 Tuple 对象可以存储 0 ~ 25 个任意类型的字段,例如,图 1 显示了 Tuple2 的类定义。

由于腾讯云Oceanus流计算的客户业务场景比较复杂,需要使用更高维度的固定Tuple类,因此我们进一步扩展了Tuple类,包含Tuple甚至Tuple。图1:Tuple2的类定义,有两个f0和f1 但是,随着Tuple维数的增加,我们观察到一个奇怪的现象:虽然需要编译的源代码文件数量仅略有增加,但编译所需的时间却是越来越长,而且不是线性增长:原本只需一分钟就能完成的编译,现在往往需要一个多小时;如果在本机上编译,甚至可能需要几个小时才能完成。

这对我们的开发效率造成了一定的影响,所以有必要找出问题的根源。初步探索为了找出Tuple数量和编译时间之间的关系,我们还编写了一个自动化脚本,每次在源代码中添加一个更高维的Tuple类(例如放入Tuple26.java、Tuple27.java)等)。

观察项目的构建速度,画出如下曲线(图中的公式是利用Excel的趋势线拟合的),见下图2: 图2:Tuples总数与编译时间的关系。可以看出,编译时间随着Tuple数量的增加而增加。

变化曲线完美拟合三次函数,即算法的时间复杂度约为O(n^3)。时间复杂度这么高的根本原因必须找到,否则随着业务规模进一步扩大,编译时间会越来越难以接受。

为了解决这个问题,我们首先想到的就是利用Profiling工具对热点和通话时长进行统计分析。这里选择了JProfiler,它提供了许多有用的分析视图,可以快速找到问题的直接根源。

首先,我们开始编译缓慢的项目的编译和构建。默认情况下,它是基于Maven的,因此我们需要找出是否是Maven导致的问题。

我们使用的JDK版本是1.8.0_。图 3:使用采样模式对 Maven 编译过程进行采样。

首先,我们使用JProfiler的Sampling模式进行采样(图3)。其效果类似于连续运行jstack命令。

进行侵入式修改,使得到的数据更加准确;另一种Instrumentation模式适合发现问题热点后利用JVMTI动态修改字节码机制(在线定位神器btrace也是基于这个原理)进行本地详细分析。需要注意的是,默认情况下,采样不包括 JVM 内的调用。

由于我们需要定位JDK问题,所以需要清除Call tr??ee过滤器中的所有排除规则。否则,问题只能定位在Maven层。

程序运行一段时间后,我们发现了热点方法(见图4),即javac编译了内部List相关的调用;通过仔细跟踪调用链,我们发现 checkWithinBounds 方法太慢了。图4:寻找热点方法。

既然找到了热点方法,我们就需要探究一下这个方法在javac编译器中做了什么,为什么它的算法这么慢,是否有优化方法。详细定位 由于调用链中有Infer类,我们知道它是负责泛型类型推断的。

通过搜索slow genericcompilation等关键词,找到了JDK-bug表,JDK-here中也提到了同样的问题。然后我们跟踪 JDK- 和 JEP-。

在今年提出的 JEP 中,开发人员设计了一种新的 javac 方法类型检测机制 TA(Tiered Attribution)来取代现有的 SA(Speculative Attribution),可以大大加快多态表达式(Poly Expression)检查过程。通过阅读这个JEP(JDK增强提案)的描述,可以知道当前的SA算法需要对同一语法树上的多个不同目标进行多次类型检查。

例如,多态表达式有 N 个重载选项。 ,那么你需要检查N * 3 + 1次。

如果允许参数嵌套的话,就会将多个因子相乘在一起,这就会导致我们上面遇到的时间复杂度很高。这种新的 TA 算法为多态表达式提供了更高效的类型检查机制。

例如,省略重载决议过程中的类型检查,在重载决议之前,为每个方法调用过程中的多态参数表达式(poly argument expression)构建决议所需的自下而上的结构化类型,从而大大减少重载决策过程中的类型检查。减少尝试的总数。

根据这些错误单,JEP-已在 JDK 9 及更高版本上实现。因此我们转而使用当前发布的LTS版本JDK 11进行验证。

通过修改JAVA_HOME环境变量,Maven可以选择使用不同的JDK版本进行编译。修改JDK 11的路径后,我们重新编译并再次采样。

我们发现类型推断不再是消耗CPU最多的方法。 (图5):图5:编译到JDK 11时的热点方法。

同时,我们欣喜地发现整个项目只用了1.5分钟就构建完毕,相比之前的1个多小时有了质的飞跃(图6): 图6:新版本JDK的编译时间 可以看出,这个JEP立竿见影,将项目构建时间恢复到之前的情况。

定位 Javac 编译速度慢的 JDK bug

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 合肥国轩金通新材料产业基金成立

    合肥国轩金通新材料产业基金成立

    投资界(ID:pedaily)消息,9月1日,合肥国轩金通新材料产业基金(以下统称“国轩金通基金”)成立大会暨首届合伙人会议在安徽合肥成功召开。 国轩金通基金由金通资本与国轩高科共同设立,基金总规模10亿,由安徽金通智汇私募基金管理有限公司(以下简称“安徽金通智汇”)管

    06-17

  • 刘强东:因业务需要,2013年之前不会引进高管

    刘强东:因业务需要,2013年之前不会引进高管

    据2月20日下午消息,久违的京东CEO刘强东现身电子书现场今天召开商务会议,讨论了近期频繁引进高管、上市和盈利等问题。 在就其他问题与媒体沟通时,他表示,京东引进高管是基于业务需要。 未来CFO和CHO都将到位,但京东在2020年之前绝不会考虑上市。   随着前宏碁中国高管

    06-18

  • 新美团已融资28亿美元,预计未来2-3年IPO

    新美团已融资28亿美元,预计未来2-3年IPO

    据报道,美团点评计划通过发行B类优先股融资30亿美元。 截至今年12月中旬,已完成28亿美元融资,其中包括腾讯10亿美元、DST 3.5亿美元、红杉资本1.5亿美元,以及中金公司和今日资本合计投资13亿美元。 融资仍在继续。   网上发布的文件显示,美团点评合并后的新公司名称为

    06-17

  • 融金控战略入股天冶矿业,宁愿发展慢一点

    融金控战略入股天冶矿业,宁愿发展慢一点

    据投资界1月26日消息,互联网金融平台融金控宣布,近期战略入股天冶矿业。 据悉,融资资金将用于技术升级和人才奖励,完善风险控制体系,更好地服务中小企业。   金交所于2016年5月上线,是最早的互联网金融平台之一,专注于汽车金融和小额信贷业务。 迄今为止,该平台已服

    06-17

  • 【创业24小时】2022年12月28日

    【创业24小时】2022年12月28日

    投融资昨天,国内市场共发生18起投资披露事件,其中医疗健康7起(刷新智能、益日健、乐维药业、金橡医药、数智医拓、迪芙润斯) 、晶珠生物科技)、先进制造案例5个(川图微电子、中科兴业、1908、赛麦测控、恒创纳米)、电商零售案例1个(启春科技)、旅游案例1个(健包青年

    06-18

  • 投资世界24小时-阿里巴巴今日首次公开募股;揭秘最神奇的VC群体;孙正义:企业最重要的是现金流

    投资世界24小时-阿里巴巴今日首次公开募股;揭秘最神奇的VC群体;孙正义:企业最重要的是现金流

    延伸阅读时间:2020年11月26日星期二重要消息阿里巴巴今日正式在香港联交所主板挂牌上市,募集资金金额为预计约为1亿港元。 据投资界11月26日消息,阔别港股七年后,阿里巴巴将于今日在港上市。 昨天,阿里巴巴集团宣布,按照每股港元的发行价计算,阿里巴巴将获得约5700万港

    06-18

  • 丹麦第三轮可再生能源招标失败

    丹麦第三轮可再生能源招标失败

    丹麦能源署昨天宣布,在6月底启动的技术中立招标中,基于太阳能光伏、陆上和海上风能、波浪能和水力发电的大型发电厂将被部署。 没有一家发电厂收到任何投标。 该机构表示,正准备与可再生能源行业举行会谈,分析招标结果令人失望的原因,并评估是否应从明年开始举行更多此类

    06-08

  • 马斯克宣布创建 ChatGPT 竞争对手! OpenAI的CEO给他泼了冷水, GPT-5可能会发生巨大变化

    马斯克宣布创建 ChatGPT 竞争对手! OpenAI的CEO给他泼了冷水, GPT-5可能会发生巨大变化

    当你在ChatGPT或新bing中输入问题时,AI会调用它的云大脑,进行思考,并生成更合理的答案。 。 OpenAI在开发GPT的时候,就被反复提到,每一代的参数都变得越来越庞大,模型的规模也越来越复杂。 训练大规模语言模型需要具有巨大算力的GPU集群,而随着用户数量呈指数级增长,运

    06-21

  • 康沃先进制造完成1500万天使轮融资,嘉友基金投资

    康沃先进制造完成1500万天使轮融资,嘉友基金投资

    投资界(ID:pedaily)10月9日消息,深圳市康沃先进制造技术有限公司(以下简称)致力于“声场生物技术”制造技术平台”(简称“康沃先进制造”)成功完成1万元天使轮融资,投资于方嘉友基金。 深圳文昌资本担任本轮融资独家提供方。 康沃先进制造公司是一家以物理声场为平台

    06-18

  • 广发证券:预计2020年归属母公司净利润同比增长33.20%

    广发证券:预计2020年归属母公司净利润同比增长33.20%

    广发证券(76.SZ)发布年度业绩报告。 预计归属于上市公司股东的净利润4200万元,同比增长33.20%。 听,中小企业反馈平台。 倾听用户需求,倾听创业者声音,解决中小企业痛点。 点击立即参与调查并获得礼物。

    06-18

  • 在一位80后女CEO的带领下,超云最强团队进军新千亿事业

    在一位80后女CEO的带领下,超云最强团队进军新千亿事业

    超云集团向外界展示了自己的“肌肉”。 3月26日,超云集团发布年度业绩公告。 公告显示,超云集团全年实现营业收入17.02亿元(人民币,下同),同比增长23%;年内实现利润2.33亿元,同比增长26.3%,调整后达到32.4%的高增长,营收和净利润双双上涨。 此外,距离上市还有不到一

    06-18

  • 台积电4月公布3nm工艺,与三星决战开始

    台积电4月公布3nm工艺,与三星决战开始

    台积电3nm工艺计划每平方毫米集成2.5亿个晶体管,每年量产。 在4月17日的台积电财报会议上,台积电首次公布了其3nm工艺的细节。 预计下半年开始量产。 台积电表示,3nm工艺不会受到疫情影响,研发进度符合预期。 预计年内进入风险试产阶段,下半年实现量产。 在评估各种方案后

    06-06