上海启嘟渡科技商贸有限公司
SEARCH

与我们合作

我们专注提供互联网一站式服务,助力企业品牌宣传多平台多途径导流量。
主营业务:网站建设、移动端微信小程序开发、营销推广、基础网络、品牌形象策划等

您也可通过下列途径与我们取得联系:

微 信: wxyunyingzhe

手 机: 15624122141

邮 箱:

极致性能优化

更新时间:2025-01-11 16:58:30

Fury,一款基于JIT动态编译的高性能多语言序列化框架,旨在为大多数类动态生成序列化代码,以减少虚方法调用、条件分支、Hash查找等开销,从而实现与kryo相比10~40倍的高性能。

在进行性能测试时,发现Fury在处理大对象时的性能提升并未达到数十倍的目标,这可能与JVM JIT编译与内联有关。本文将阐述如何通过分析和优化,实现数十倍性能提升。

分析步骤分为两部分:首先,通过命令行查看JVM相关参数,确认当前使用的JIT编译器及编译参数。在macOS与JDK8环境下,使用的是默认的server模式和分层编译选项。注意某些不可调整参数需查看JDK源码以获取详细信息。

接着,打开编译器日志,关注tiered_level、size和deopt,以检查编译过程是否存在异常。使用特定参数打印JVM JIT编译日志,日志由五个部分组成,通过分析这些信息,重点关注Fury生成代码的最终tier level 4部分,忽略无意义的内联优化信息。

确认Fury生成的代码过大,无法在内联过程中达到最优状态。优化策略在于将生成的代码进行拆分,将其转换为多个小方法,再在其他方法中调用这些小方法。这一过程需要基于规则对表达式树进行切割,为每个子树生成单独的方法,并在表达式树的父类节点调用相关方法。面对的主要挑战在于如何高效地进行代码拆分与调用。

在优化后,JIT日志显示几乎所有代码已被完全内联,达到了预期的优化效果。在处理大对象场景时,此类优化能够实现数十倍的性能提升。

欢迎参与Fury社区,无论是提问、代码贡献还是技术讨论,都对项目发展至关重要。期待您的参与,共同推动项目向前发展,打造最先进序列化框架。

多重随机标签

猜你喜欢文章

QQ客服 电话咨询