2012-02-29 13 views
0

メモリがリークする可能性がありますか? 私たちはJavaコードを呼び出す際に複雑な検証規則を使用しています。 バックエンドへの各リクエストには、2-3回のダウンロードファイルと新しいKnowledgeBaseがリクエストごとに作成されます。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(); 
} 

これは私がプロファイリングの多くを行なったし、Droolsの5.1のいずれかのメモリリークが見つかりませんでした液垂れルール

+0

メモリベースでDroolsアプリケーションのプロファイリングを覚えているわけではありませんが、ナレッジベースが重視されていることは文書化されています。なぜあなたはリクエストごとに新しいものを作成していますか?通常は、アプリケーションの起動時に1 KBを初期化し、アプリの存続期間中に再利用します。 – Perception

+0

はい、あなたのセッションはどうですか?リクエストごとにKBaseとKSessionを作成していますか? CHeers – salaboy

+0

@salaboyはいリクエストごとにKBaseとKSessionを作成しています – Vish

答えて

1

ための私たちのコードです。ステートフルセッションを使用している場合は、ステートフルセッションを使用した後に必ずdispose()を呼び出してください。可能であれば、kbasesのキャッシュも推奨されますが、オンデマンドで作成するとメモリがリークしてはいけません。

それ以外のJavaアプリケーションと同じです。プロファイラを使用して、オブジェクトインスタンスをメモリ内に保持するクラス(存在する場合)を見つけます。