AnyLogic内存错误:如何查询代码超出65535字节阈值的具体数值?
方法字节码大小查询及优化方案
查询实际超出阈值的具体数值
该报错由Java虚拟机对单个方法的固定代码长度限制导致,阈值为65535字节,可按以下步骤获取当前方法的实际字节码大小:
- 先完整运行一次模型触发编译,即使最终报错也可完成类文件生成
- 找到AnyLogic模型的临时编译目录:默认路径为
C:\Users\<你的系统用户名>\.anylogic\<对应AnyLogic版本号>\workspace\.metadata\.plugins\org.eclipse.debug.core\.launches,也可在AnyLogic偏好设置的「编译」选项卡中查看自定义的临时文件输出路径 - 在编译目录中找到
Main.class文件,打开命令行执行Java自带的类分析命令:javap -c -verbose Main - 在输出结果中搜索方法名
_createPersistentElementsBP4_xjal,找到对应条目下的Code length字段,该数值就是当前方法的实际字节码长度,用该值减去65535即可得到超出的字节数
不同超出量的处理建议
- 超出量在5000字节以内:可优先做精简调整
- 删除Main代理中所有未使用的冗余可视化元素、备用图表、测试用标记
- 将重复使用的样式类元素(如通用路标、节点样式、弧线模板)封装为独立的自定义智能体,不要在Main中重复绘制
- 把不需要动态修改的静态矢量绘图导出为图片,用图片控件替代原生绘图元素
- 超出量超过10000字节:建议拆分模块
- 将功能独立的模块(如路网模块、数据展示模块、业务逻辑模块)分别拆分到独立的智能体中,在Main中仅做实例化引用
- 将非必要的初始化逻辑(如图表配置、参数批量赋值)移到自定义函数或
on startup事件的分段逻辑中执行
内容的提问来源于stack exchange,提问作者Yashar Ahmadov
相关产品推荐
相关产品推荐

