美文网首页
drools 内存泄漏

drools 内存泄漏

作者: 金刚_30bf | 来源:发表于2018-08-26 14:17 被阅读0次

    原代码 :

    w.insert(user);  
    w.fireAllRules();  
    w.dispose();  
    

    修改后代码:

    FactHandle fact =  w.insert(user);  
    w.fireAllRules();  
    w.dispose();  
    w.retract(fact);
    

    or

    w.insert(user);  
    w.fireAllRules();  
    w.dispose();  
    w.retract(w.getFactHandle(user)); 
    

    如上代码所示,w.insert(user)执行完这句代码后会返回一个FactHandle对象,需要WorkingMemory调用retract方法将其从内存中清除掉,不然,即使走完了规则变成了垃圾对象,也无法被垃圾回收器回收,因为WorkingMemory还在引用这个插进去的User对象 。

    为什么数据量大的测试环境没有出现oom呢?原因很简单:因为测试环境的数据量虽然大,但能够匹配规则的数据量少,也就是说插入进WorkingMemory中的User对象少,而生产环境正好相反,这就是为什么数据量小反倒还出现oom的原因!

    结论:这是因为drools内存泄露导致的内存溢出!

    引用自: https://blog.csdn.net/hellozhxy/article/details/80533352

    相关文章

      网友评论

          本文标题:drools 内存泄漏

          本文链接:https://www.haomeiwen.com/subject/coroiftx.html