我正在使用 Groovy 1.7.6,我们有一个使用基本 mixin 的类(为此目的在下面进行了简化):
class MixinClass {
def self
def init(me){
this.self = me
}
}
我将此mixin添加到另一个类(也简化了),如下所示:
@Mixin(MixinClass)
class FunctionEntry {
def FunctionEntry(){
init(this)
}
..
以上基本上只是将 FunctionEntry 类的实例的引用传递给@mixin 以供参考(尽管这可能是任何数据)
如果我现在运行一个测试,并循环调用数千次,new FunctionEntry()
我最终会得到一个 Heap OOM 错误(注意,循环实际上只是实例化了对象,它不会将它存储在任何地方)。
调试了堆后,我发现问题是MixinInMetaClass
- 我的结论是,即使我丢弃了对象实例, MixinInMetaClass 仍在保留数据而不被收集。
有没有人遇到过这个问题?这是一个已知的 Groovy 1.7.6 问题吗?我的印象是 Mixin 可以保持状态,但是这个证据似乎表明 MixinInMetaClass 每次我创建一个对象时都在锁定对象数据。