velocity-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <lawre...@marchex.com>
Subject Re: OutOfMemoryException Processing Velocity Template
Date Fri, 06 May 2005 17:48:48 GMT
Ok, I think I've located the problem, although I can't think of a reasonable solution.   

Basically, if I make the #foreach loop EMPTY, it uses barely any memory:
#foreach($row in $List)

#end

As I add more to the body of the #foreach:
#foreach($row in $List)
<tr>
</tr>
#end

The amount of memory starts to grow (exponentially?).  

I did some playing around, and found that this:

#foreach($row in $List)
<tr>
<td height="20" class="tbltxt">$!row.item1</td>
<td class="tbltxt">$!row.item2</td>
<td class="tbltxt">$!row.item3</td>
</tr>
#end

Uses approximately 100+ MB of memory.   Something is going on ... but I have no clue what
it is.

-L


On Fri, May 06, 2005 at 10:36:25AM -0700, lawrence@marchex.com wrote:
> I tried putting static HTML in the #foreach loop, same problem.  Then I tried setting
the large list as a "local" varible:
> 
> #set ($localList = $List)
> #foreach($row in $localList)
> ...
> 
> but that didnt help either.   I don't see why velocity should use 250+ MB of memory iterating
over a list ~8MB in size...  
> 
> -L
> 
> On Thu, May 05, 2005 at 02:56:28PM -0700, jian chen wrote:
> > Well, I don't have a good clue now. 
> > 
> > What about do the debugging step by step, i.e., use just static html
> > in your #foreach loop? Will that blow up the memory?
> > 
> > Cheers,
> > 
> > Jian
> > 
> > 
> > 
> > On 5/5/05, lawrence@marchex.com <lawrence@marchex.com> wrote:
> > > Thanks for the suggestion.   I tried putting that, along with
> > > 
> > > file.resource.loader.cache = true
> > > 
> > > in my velocity.properties file.   Both did not work.   Any other suggestions?
> > > 
> > > Thanks!
> > > 
> > > -L
> > > 
> > > On Thu, May 05, 2005 at 02:11:28PM -0700, jian chen wrote:
> > > > Hi,
> > > >
> > > > This maybe because you haven't turned on template caching. I had
> > > > similar problem before, and even if I only used evaluate(...) method
> > > > and load the template using my own java program, it happened when the
> > > > for loop is lot of iterations.
> > > >
> > > > The bottom line for my problem is I need to turn on template caching,
> > > > so, velocity will not try to cache the objects it parsed during each
> > > > time of the iteration.
> > > >
> > > > I did:
> > > > ri.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, "true");
> > > >
> > > > where ri is a runtime instance.
> > > >
> > > > Will this fix your issue?
> > > >
> > > > Cheers,
> > > >
> > > > Jian
> > > >
> > > >
> > > > On 5/5/05, lawrence@marchex.com <lawrence@marchex.com> wrote:
> > > > > I am getting an OutOfMemoryException:
> > > > >
> > > > > org.apache.velocity.exception.MethodInvocationException: Invocation
of method 'get' in  class org.apache.velocity.tools.struts.TilesTool threw exception class
java.lang.OutOfMemoryError : null
> > > > >
> > > > > when I am creating a large velocity file.  The vm file itself is
fairly small, but this piece of velocity is causing the exception:
> > > > >
> > > > > #foreach($row in $List)
> > > > > <tr>
> > > > > <td height="20" class="tbltxt">$!row.item1</td>
> > > > > <td class="tbltxt">$!row.item2</td>
> > > > > <td class="tbltxt">$!row.item3</td>
> > > > > <td class="tbltxt">$!row.item4</td>
> > > > > <td class="tbltxt">$!number.format('currency', $!row.item5)</td>
> > > > > </tr>
> > > > > #end
> > > > >
> > > > > List is a list of relatively small objects (5-6 Strings, a couple
of BigDecimals), but the List itself contains approximately 66,000 entries.  Unfortunately,
unless I set the tomcat JVM to use a heap size of at least 256M, this velocity template throws
an OutOfMemoryException when it is being processed.
> > > > >
> > > > > Any suggestions?
> > > > >
> > > > > Thanks.
> > > > >
> > > > > -L
> > > > >
> > > > > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
> > > > > For additional commands, e-mail: velocity-user-help@jakarta.apache.org
> > > > >
> > > > >
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
> > > > For additional commands, e-mail: velocity-user-help@jakarta.apache.org
> > > 
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail: velocity-user-help@jakarta.apache.org
> > > 
> > >
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: velocity-user-help@jakarta.apache.org
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: velocity-user-help@jakarta.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-user-help@jakarta.apache.org


Mime
View raw message