Drools Java OutOfMemory错误

Drools Java OutOfMemory错误,java,drools,rule,Java,Drools,Rule,我有一个规则,检查是否有5个事实具有相同的值(过去7天内有5个事实具有相同的值)。现在我处理的是40个事实,所以规则检查这40个事实。前20名没问题,但每次都需要更长的时间。由于Java发送OutOfMemory异常,所以21未执行 这是我的规则: rule "MUL_04" no-loop true when r_A:Fact(viewed==false) r_B:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_F

我有一个规则,检查是否有5个事实具有相同的值(过去7天内有5个事实具有相同的值)。现在我处理的是40个事实,所以规则检查这40个事实。前20名没问题,但每次都需要更长的时间。由于Java发送OutOfMemory异常,所以21未执行

这是我的规则:

rule "MUL_04"
no-loop true
when

    r_A:Fact(viewed==false)
    r_B:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7)
    r_C:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7, r_B!=r_C)
    r_D:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7, r_C!=r_D, r_B!=r_D)
    r_E:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7, r_B!=r_E, r_C!=r_E, r_D!=r_E)
    r_F:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7, r_B!=r_F, r_C!=r_F, r_D!=r_F, r_E!=r_F)


then
        modify (r_A) {
        setViewed(true),
        setEST_EST_FRA(1),
        setEST_PRO_EST(1)
    }
end
但我无法获得预期的性能。此外,当我尝试处理100多个事实时,我也会遇到Java堆问题


我不明白。这是对我的问题的正确查询吗?

你正在引发一场组合爆炸:40个事实将在所有可能的组合中与你的五个子句相匹配。一个好的方法是统计符合你标准的事实的数量。这是通过使用规则作为查询来实现的(除其他地方外,还描述了)。

您正在引发一场组合爆炸:40个事实将在所有可能的组合中与您的五个子句相匹配。一个好的方法是统计符合你标准的事实的数量。这是通过使用规则作为查询来实现的(除其他地方外,还描述了)。

您正在引发一场组合爆炸:40个事实将在所有可能的组合中与您的五个子句相匹配。一个好的方法是统计符合你标准的事实的数量。这是通过使用规则作为查询来实现的(除其他地方外,还描述了)。

您正在引发一场组合爆炸:40个事实将在所有可能的组合中与您的五个子句相匹配。一个好的方法是统计符合你标准的事实的数量。这是通过使用规则作为查询来实现的(在其他地方有描述)

   query multipleRequests(Fact r_A, Integer exits)
    $exits := Number(intValue>=5) from accumulate(
         r_B:Fact(viewed==true,INT_IP == r_A.INT_IP,Tools.check(SOL_FEC, r_A.SOL_FEC) <=7),
         count(r_B)
         )
end
rule "MUL_04_WithQuery"
no-loop true
when
    r_A:Fact(viewed==false)
    $numbers : multipleRequests(r_A;)    
then
        modify (r_A) {
            setViewed(true),
            setEST_EST_FRA(1),
            setEST_PRO_EST(1)
        }
end