【问题标题】:AnyLogic method exceeding the byte limit error: how these methods are actually defined?AnyLogic方法超出字节限制错误:这些方法实际上是如何定义的?
【发布时间】:2021-12-23 23:12:30
【问题描述】:

这是this的后续问题;关于错误信息如下:

说明:_createPersistentElementsBP5_xjal() 方法的代码超出了 65535 字节的限制。

它基本上说_createPersistentElementsBP5_xjal()方法的代码大小已经超过了最大限制。通过查看模型的Java代码,我看到我的主代理分为六个部分:_createPersistentElementsBP1_xjal()_createPersistentElementsBP2_xjal()、...、_createPersistentElementsBP6_xjal()

编号为 5 的那个有问题。但是,我找不到任何关于如何分离这些方法的定义逻辑(例如,在哪个方法中包含哪些元素)。

如果您查看屏幕截图的顶部,您会看到路径 5、6、7 属于 ...BP4_xjal()。然后以交叉点和一个名为reversePoint4 的节点开始...BP5_xjal()(有问题的那个)。其实reversePoint4path5/6/7都属于同一个网络。

问题是:AnyLogic 中此类方法定义的基础是什么(例如,哪些元素将属于哪个方法)?是不是随意做的?

【问题讨论】:

    标签: java anylogic agent-based-modeling


    【解决方案1】:

    您可能只有通过询问 AnyLogic 支持才能知道答案,因为这是其代码生成的内部机制。我的猜测是它只是将空间标记元素的初始化拆分为给定数字的“块”(也许 --- 这很讽刺 --- 试图避免方法/签名大小问题)。

    (我假设 BP1-5 拆分不对应于您模型中的任何“功能”拆分;例如,不同的空间标记网络或类似网络。您似乎在您的问题中暗示了这一点。)

    【讨论】:

      【解决方案2】:

      Java 对可用于定义单个方法的文本数量有内置限制(更多解释 here)。在这种情况下,这个错误是由AnyLogic生成的方法的实际文本引起的。

      为了解决这个问题,我会尝试重构模型以减少文本量。这可以通过定义创建元素的函数来完成,而不是直接定义元素或在其他代理中移动元素,然后包含在 Main 代理中。

      【讨论】:

      • 查看他正在跟进的问题,该问题已经涵盖了这方面(可能的重构和我很确定适用于字节码大小的限制,不是源文本大小)。
      • 正确,我错过了最初的讨论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多