闭包的upvalue内存释放与值类型n有关,n是值类型,因此不会生成额外的GCObject,其内存与该函数绑定在一起,实际上保存在函数的Proto中。若要使这部分内存得以释放,需确保Proto不被引用。确保释放Proto,需清除require文件的缓存。通过设置package.preload.require文件名 = nil,即可清理文件闭包,例如在例子中应设置package.preload["(省略目录).A"] = nil。此操作将解除对Proto的引用,若有其他引用则不会立即释放内存。若无其他引用,gc将适时释放内存。
温馨提示:答案为网友推荐,仅供参考