You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JVM参数-XX:CompileCommand=exclude失效,如何阻止指定方法JIT编译?

如何阻止指定方法被JIT编译

针对你遇到的-XX:CompileCommand=exclude未生效的问题,可按以下步骤排查解决:

1. 精准匹配方法签名

JVM的CompileCommand默认仅匹配方法名,若目标方法存在重载,需指定完整方法签名才能精准排除。从JFR事件可见,被编译的方法是String com.alibaba.fastjson.parser.SymbolTable.addSymbol(char[], int, int, int),因此需修改参数为:

-XX:CompileCommand=exclude,com/alibaba/fastjson/parser/JSONLexerBase::scanSymbol \
-XX:CompileCommand=exclude,com/alibaba/fastjson/parser/SymbolTable::addSymbol(char[],int,int,int)

注意:参数间不要加空格,基本类型用原生缩写(如int、char[]),引用类型需写全限定类名。

2. 批量排除重载方法

若要排除该类下所有名为addSymbol的重载方法,可使用通配符简化命令:

-XX:CompileCommand=exclude,*,com/alibaba/fastjson/parser/SymbolTable::addSymbol

如果需要禁用整个类的JIT编译,可写为:

-XX:CompileCommand=exclude,com/alibaba/fastjson/parser/SymbolTable::*

3. 验证命令是否生效

添加-XX:+PrintCompileCommands参数启动应用,控制台会打印所有生效的编译命令。若看到类似如下输出,说明排除规则已成功加载:

Excluding compile: com/alibaba/fastjson/parser/SymbolTable::addSymbol(char[],int,int,int)

若未输出对应内容,需检查命令格式是否有误。

4. 排查冲突参数

确保应用启动参数中没有以下干扰项:

  • 存在-XX:CompileCommand=include命令覆盖了exclude规则;
  • 启用了其他编译器(如-XX:+UseJVMCICompiler)导致规则不生效;
  • 模块化项目中未指定模块名(若FastJSON以模块方式引入,需添加模块前缀:-XX:CompileCommand=exclude,模块名/com/alibaba/fastjson/parser/SymbolTable::addSymbol(...))。

5. 确认最终效果

应用启动后,可通过jcmd <进程ID> compiler.codecache命令查看已编译方法列表,确认目标方法未出现在其中,或再次通过JFR验证是否还有该方法的C2编译事件。

内容的提问来源于stack exchange,提问作者FlyChenKai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:52:19