2

我正在使用 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 每次我创建一个对象时都在锁定对象数据。

4

0 回答 0