<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="&#1;" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:798255792;
        mso-list-template-ids:-618350612;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body bgcolor=white lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='color:#1F497D'>I believe it should make some
difference in permgen to generate a single class. Some of the permgen data is
generated on a per-class basis. It may not make enough of a difference though.
Given that the mvel dialect is a valid workaround for the problem it probably
isn&#8217;t worth the effort.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>I can think of two alternatives
to solve the problem (if the problem is worth solving).<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>The first is to unload the
classes generated for a given package when that package is reloaded. The
permgen problems I&#8217;ve encountered have been when a rule package is
replaced or many times in succession. Each time a class is generated during the
package replacement its definition ends up in permgen. This would involve a
custom class loader for the generated classes and the ability to remove all
references to generated classes on demand. Probably mvel changes to make this
work.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>The second alternative would be
to provide a configuration option to approach the java dialiect like the mvel
dialect and compile and execute on demand. This would likely be big drag on
performance and not worth doing.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>I&#8217;ll be in Dallas and if
this project isn&#8217;t worth working on I&#8217;d be happy to pick something
else up that would get me deeper into the code,<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>Joe<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>More on permgen http://blogs.sun.com/jonthecollector/entry/presenting_the_permanent_generation<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";
color:windowtext'>From:</span></b><span style='font-size:10.0pt;font-family:
"Tahoma","sans-serif";color:windowtext'> rules-dev-bounces@lists.jboss.org
[mailto:rules-dev-bounces@lists.jboss.org] <b>On Behalf Of </b>Mark Proctor<br>
<b>Sent:</b> Tuesday, October 14, 2008 9:11 AM<br>
<b>To:</b> Rules Dev List<br>
<b>Subject:</b> Re: [rules-dev] RE: [rules-users] Invokers and class gen<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Joe White wrote: <o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>I&#8217;ve spent a little time
looking into allowing the invokers to be generated as methods in a single class
rather than individual classes as is discussed below.</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>Btw
chatting to edson, he's not sure this will reduce perm gen size - what is the
size differnce from one big class, and multiple small ones,on the perm gen.
It's worth checking that this will make a difference, before doing it.<br>
<br>
<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>It seems like a new set of mvel
templates will need to be created to allow the java invokers to be generated as
methods rather than individual classes. Then the Abstract Builder code will
need to be updated to reference the correct template based on the user provided
granularity level. For granularity, should there be any levels outside of: one
class per package, one class per rule, and the current one class per invoker?</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>If
you can show that this is worth while doing, I'd look at making it configurable
- although typically I imagine one per package.<br>
<br>
<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>Am I on the right track?</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>Thanks,</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>Joe</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<div>

<div style='border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;
border-color:-moz-use-text-color -moz-use-text-color'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";
color:windowtext'>From:</span></b><span style='font-size:10.0pt;font-family:
"Tahoma","sans-serif";color:windowtext'> <a
href="mailto:rules-users-bounces@lists.jboss.org">rules-users-bounces@lists.jboss.org</a>
[<a href="mailto:rules-users-bounces@lists.jboss.org">mailto:rules-users-bounces@lists.jboss.org</a>]
<b>On Behalf Of </b>Mark Proctor<br>
<b>Sent:</b> Thursday, August 14, 2008 11:01 AM<br>
<b>To:</b> Rules Users List<br>
<b>Cc:</b> Rules Dev List<br>
<b>Subject:</b> Re: [rules-users] Max packages</span><o:p></o:p></p>

</div>

</div>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

<p class=MsoNormal>Joe White wrote: <o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>Mark, thank you very much for
your help, it is greatly appreciated.</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>&#8220;There
are improvements we can make to generated code into a single class and use a
switch statement to invoke the correct part, but we don't have time for that
right now, so would need to come from the community.&#8221;</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
color:#4F81BD'>I would be interested in doing this work if someone can point me
in the right direction on where to start.</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>look
for the *.mvel templates in drools-compiler you'll see how we generate the
code. Then look at all the various java builders, like JavaConsequenceBuilder
and you'll see how we construct it. compiled code is done in two places. We
first generate an invoker class which implements the interface, like the
Consequence interface and then we genernate the code to be executed which is
called via the invoker. It needs to be two as the needed parameters for the
java consequence to execute differer (different number of vars) so the invokers
job is to match the needed interfaces and adapt/bridge to calling to the actual
consequence/eval/predicate. We currently generate all the
consequence/eval/predicate in a single class per rule, but we have a class per
invoker.<br>
<br>
So we now need invoker apis, like Consequence, to take an int so it can use a
switch statement to which allows multiple invocations to be generated into the
same file. An idea solution will take a configuration on teh granularity that
people want - to what we have now right up to putting everything into a single
file for the entire package.<br>
<br>
<br>
</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
color:#4F81BD'>I also would be interested in doing the work to allow drools to
reference multiple levels of inner classes. </span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>This
is done and fixed in 4.0.x and trunk - we just haven't released any binaries
wit hteh fix.<br>
<br>
<br>
</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
color:#4F81BD'>Our work would benefit from both pieces of functionality.
I&#8217;ll move this to the developer list, but would appreciate if somebody
knowledgeable could show me where to get started on the code necessary to
generate to a single class.</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>I've
cc'd this into the dev mailing list, so please when you reply do so to just
that mailing list.<br>
<br>
<br>
</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
color:#365F91'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
color:#365F91'>Thanks,</span><o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
color:#365F91'>Joe<br>
<br>
<br>
<br>
</span><o:p></o:p></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<div>

<div style='border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;
border-color:-moz-use-text-color'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";
color:windowtext'>From:</span></b><span style='font-size:10.0pt;font-family:
"Tahoma","sans-serif";color:windowtext'> <a
href="mailto:rules-users-bounces@lists.jboss.org">rules-users-bounces@lists.jboss.org</a>
[<a href="mailto:rules-users-bounces@lists.jboss.org">mailto:rules-users-bounces@lists.jboss.org</a>]
<b>On Behalf Of </b>Mark Proctor<br>
<b>Sent:</b> Wednesday, August 13, 2008 2:53 AM<br>
<b>To:</b> Rules Users List<br>
<b>Subject:</b> Re: [rules-users] Max packages</span><o:p></o:p></p>

</div>

</div>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

<p class=MsoNormal>Joe White wrote: <o:p></o:p></p>

<p class=MsoNormal>Can someone help me understand the relationship between the
number of Packages in a single RuleBase and PermGen memory consumption? I have
a test that generates &nbsp;200 rules and then adds those rules as different
packages to a single rule base. PermGen consumption grows near linearly with
the addition of Packages to the rule base and on a default PermGen setting the
JVM runs out of PermGen after about 120 packages.<o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>It's
not related to Packages, it's related to the number of rules and whether those
rules have compiled java parts&nbsp; - like the consequence, eval etc - each
one adds an additional class.<br>
<br>
<br>
<br>
</span><o:p></o:p></p>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

<p class=MsoNormal>Is every new Package and RuleBase backed by a set of
generated Classes? Is there a way to get around the amount of class generation
that is taking place?<o:p></o:p></p>

<p class=MsoNormal>The test has been run against Drools 5.<o:p></o:p></p>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>You
can use MVEL, which has no class generation. There are improvements we can make
to generated code into a single class and use a switch statement to invoke the
correct part, but we don't have time for that right now, so would need to come
from the community.<br>
<br>
<br>
<br>
</span><o:p></o:p></p>

<p class=MsoNormal>&nbsp;<o:p></o:p></p>

<p class=MsoNormal>Thank you for your help,<o:p></o:p></p>

<p class=MsoNormal>Joe<o:p></o:p></p>

<pre>&nbsp;<o:p></o:p></pre><pre style='text-align:center'>&nbsp;<o:p></o:p></pre><pre
style='text-align:center'><o:p>&nbsp;</o:p></pre><pre style='text-align:center'>

<hr size=4 width="90%" align=center>

</pre><pre style='text-align:center'><o:p>&nbsp;</o:p></pre><pre
style='text-align:center'><o:p>&nbsp;</o:p></pre><pre style='text-align:center'>&nbsp; <o:p></o:p></pre><pre
style='text-align:center'>&nbsp;<o:p></o:p></pre><pre style='text-align:center'>&nbsp;<o:p></o:p></pre><pre
style='text-align:center'>&nbsp; <o:p></o:p></pre><pre>&nbsp;<o:p></o:p></pre><pre>_______________________________________________<o:p></o:p></pre><pre>rules-users mailing list<o:p></o:p></pre><pre><a
href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><o:p></o:p></pre><pre><a
href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a><o:p></o:p></pre><pre>&nbsp; <o:p></o:p></pre>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>&nbsp;</span><o:p></o:p></p>

<pre>&nbsp;<o:p></o:p></pre><pre style='text-align:center'><o:p>&nbsp;</o:p></pre><pre
style='text-align:center'>

<hr size=4 width="90%" align=center>

</pre><pre style='text-align:center'><o:p>&nbsp;</o:p></pre><pre
style='text-align:center'><o:p>&nbsp;</o:p></pre><pre style='text-align:center'>&nbsp; <o:p></o:p></pre><pre>&nbsp;<o:p></o:p></pre><pre>_______________________________________________<o:p></o:p></pre><pre>rules-users mailing list<o:p></o:p></pre><pre><a
href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><o:p></o:p></pre><pre><a
href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a><o:p></o:p></pre><pre>&nbsp; <o:p></o:p></pre>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>&nbsp;</span><o:p></o:p></p>

<pre><o:p>&nbsp;</o:p></pre><pre style='text-align:center'>

<hr size=4 width="90%" align=center>

</pre><pre><o:p>&nbsp;</o:p></pre><pre>_______________________________________________<o:p></o:p></pre><pre>rules-dev mailing list<o:p></o:p></pre><pre><a
href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><o:p></o:p></pre><pre><a
href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a><o:p></o:p></pre><pre>&nbsp; <o:p></o:p></pre>

<p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'><o:p>&nbsp;</o:p></span></p>

</div>

</body>

</html>