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