Mule 4:内存管理:如果传递的参数太大,是否会在Mule中发生stackoverflowerror?

问题描述 投票:0回答:1

我对Dataweave / Java有以下理解

方法的局部变量存储在堆栈存储器中,如果方法使用对象作为局部变量,则在堆存储器中创建该对象,并且该局部变量将引用在堆存储器中创建的该特定对象。

如果这是正确的,如果我们使用像join或reduce这样的数据编织方法来处理一个参数,该参数是一个大小大于50k的对象数组,那么在Mule中是否会遇到stackoverflow错误?

<ee:transform doc:name="Outer Join And Merge" doc:id="fd801b56-9992-4a89-95a3-62ab4c4dc5a2">
<ee:message>
<ee:set-payload>%dw 2.0
import * from dw::core::Arrays
output application/java
var joinedData = outerJoin(vars.databaseOneRecords,vars.databaseTwoRecords,(obj)->obj.StudentID,(obj)->obj.RollNumber)
---
joinedData reduce ((item, acc = {
    'matched': [],
    'unmatched': []
})      
                            ->  if(item.l != null and item.r != null)
                                    {
    matched: (acc.matched default []) ++ [item.l ++ item.r],
    unmatched: acc.unmatched
}  
                                    else {
    matched: acc.matched,
    unmatched: (acc.unmatched default []) ++ [ if(item.l != null) item.l else item.r ]
} )</ee:set-payload>
</ee:message>
</ee:transform>



java dataweave mule4
1个回答
0
投票

Reduce是迭代的,因此您不应该使用stackoverflow来运行,否则可能会耗尽内存,但不能堆栈。如果存在某些递归函数,则可能会发生,然后是。如果您遇到这种情况,请在脚本中发布一些示例数据,我们可以从中进行工作。

© www.soinside.com 2019 - 2024. All rights reserved.