2012-02-29 34 views
0

可否流口水5.1会导致内存泄漏问题? 我们在调用java代码的地方使用复杂的验证规则。 每个请求都会为每个请求创建后端加载2-3流口水文件和新知识库的请求。Drools 5.1内存问题

任何人都可以对此有更多的了解吗?

private void initRulesEngine() { 
    kbase = KnowledgeBaseFactory.newKnowledgeBase(); 
    if (kbuilder != null) { 
     kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); 
    } 
} 

public void executeRules(BaseUOW requestedUOW) { 
    initRulesEngine(); 
    ksession = kbase.newStatefulKnowledgeSession(); 
    ksession.insert(requestedUOW); 
    ksession.fireAllRules(); 
} 

这是我们的口水规则

+0

我不记得我们在记忆方面对我们的Drools应用程序进行了描述,但是这是一个有据可查的事实,知识库是一个沉重的重量。你为什么要为每个请求创建一个新的?通常,您在应用程序启动时初始化一个KB,然后在应用程序的整个生命周期中重新使用它。 – Perception 2012-02-29 12:02:47

+0

是的,你的会话呢?您是否为每个请求创建了一个KBase和一个KSession? CHeers – salaboy 2012-02-29 13:04:43

+0

@salaboy是的,我们正在创建一个基于每个请求的KBase和一个KSession – Vish 2012-03-01 07:42:29

回答

1

我做了很多分析,并没有发现Drools的5.1任何内存泄漏的代码。如果您使用有状态会话,请确保在使用它们之后调用dispose()。如果可能的话,也建议缓存kbases,但按需创建它们不应泄漏内存。

除此之外,它就像任何其他Java应用程序一样。使用探查器来找出哪些类(如果有的话)将对象实例保留在内存中。