Nashorn ScriptObjects 上下文中的 "spill" 是什么?

What is "spill" in the context of Nashorn ScriptObjects?

我正在分析我们的一些 Nashorn 代码。我们在执行之间汇集并重用我们的 ScriptContext。我注意到 ScriptContext 在某处泄漏内存,我可以将其追溯到 Global class:

中的 spill 属性

泄漏有什么作用?有什么办法清除吗?

如果在对象创建后添加属性,如 "obj.x = 34" 在创建并初始化 "obj" 之后,Nashorn 会创建 "spill" 区域或扩展已创建的 "spill"区域来保存这些额外的属性。如果您在构造函数中(或在对象文字中)初始化所有属性,那么该对象中将不会有任何 "spill" 区域。全局本质上永远是 "expanding" 对象——随着你评估更多的代码,你会不断创建更多的变量。所以,全球会有溢出。