velocity-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nathan Bubna <nbu...@gmail.com>
Subject Re: OutOfMemoryException Processing Velocity Template
Date Tue, 10 May 2005 17:44:05 GMT
well, maybe you can just override the VVS's getResponseWriter() method
somehow to try calling/using getOutputStream() on requests first.  but
i'm not sure that will do the trick.  it might, if it's just
StringWriter that is the problem and the whole of the tile's content
can be reasonably held in memory with a ByteArrayOutputStream (which
is what the ImportResponseWrapper uses to hold the tile content if
getOutputStream() is called instead of getWriter()).

might be worth a shot at least.

On 5/10/05, lawrence@marchex.com <lawrence@marchex.com> wrote:
> Hm, thats interesting.  Thanks for the info.   What would you suggest I do?   Can I easily
override a method in VelocityViewServlet that fixes this problem?
> 
> -L
> 
> On Tue, May 10, 2005 at 10:32:40AM -0700, Nathan Bubna wrote:
> > if you are using the TilesTool, note that it extends ImportSupport
> > which uses a custom HttpServletResponseWrapper (an internal class
> > called ImportResponseWrapper).  if the getWriter() method is called on
> > that wrapper instead of getOutputStream(), then the wrapper will use a
> > StringWriter to hold the content being imported.  i believe the
> > VelocityViewServlet does indeed try to use getWriter() before trying
> > getOutputStream().  so import requests via the TilesTool that are
> > mapped to the VVS, will use a StringWriter.
> >
> > i'm not sure if this helps, but i seem to recall mention of the
> > TilesTool early in the thread and that use of a StringWriter seems to
> > be the problem.
> >
> > On 5/10/05, lawrence@marchex.com <lawrence@marchex.com> wrote:
> > > The TufteViewServlet overrides mergeTemplate only to print out some various
memory statistics.   I'll try playing around with setBufferSize(), but I'm close to giving
up =\.
> > >
> > > -L
> > >
> > > On Tue, May 10, 2005 at 09:19:33AM +0300, Ilkka Priha wrote:
> > > > Maybe not the tiles tool, but some other filter or processor along the
> > > > trace may have wrapped the response with a caching one. And you have
> > > > TufteViewServlet calling mergeTemplate and actually deciding the writer
to
> > > > apply, not VelocityViewServlet...
> > > >
> > > > You can set the buffer size of the response before any output with
> > > > response.setBufferSize() (or check its current size with
> > > > response.getBufferSize()). That should set the buffer size for
> > > > ServletOutputStream correspondingly.
> > > >
> > > > -- Ilkka
> > > >
> > > > BTW. Are browsers capable of viewing an HTML page of 100-200 MB in size
and
> > > > how long does it take to load such a monster through the net?
> > > >
> > > >
> > > > lawrence@marchex.com wrote:
> > > > >The stack trace makes it seem like the problem still originates from
the
> > > > >VelocityViewServlet, and not the TilesTool:
> > > > >
> > > > >org.apache.velocity.exception.MethodInvocationException: Invocation
of
> > > > >method 'get' in  class org.apache.velocity.tools.struts.TilesTool
threw
> > > > >exception class java.lang.OutOfMemoryError : null
> > > > >     at
> > > > >     org.apache.velocity.runtime.parser.node.ASTIdentifier.execute(ASTIdentifier.java:193)
> > > > >     at
> > > > >     org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:175)
> > > > >     at
> > > > >     org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:220)
> > > > >     at
> > > > >     org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:230)
> > > > >     at org.apache.velocity.Template.merge(Template.java:256)
> > > > >     at
> > > > >     tufte.controller.tools.servlet.TufteViewServlet.mergeTemplate(TufteViewServlet.java:106)
> > > > >     at
> > > > >     org.apache.velocity.tools.view.servlet.VelocityViewServlet.doRequest(Unknown
Source)
> > > > >     at
> > > > >     org.apache.velocity.tools.view.servlet.VelocityViewServlet.doGet(Unknown
Source)
> > > > >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> > > > >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> > > > >     at
> > > > >     org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
> > > > >     at
> > > > >     org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)
> > > > >     at
> > > > >     org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)
> > > > >     at
> > > > >     org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1097)
> > > > >     at
> > > > >     org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:302)
> > > > >     at
> > > > >     org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:278)
> > > > >     at
> > > > >     org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:341)
> > > > >     at
> > > > >     org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:272)
> > > > >     at
> > > > >     org.apache.struts.action.ActionServlet.process(ActionServlet.java:1187)
> > > > >     at
> > > > >     org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:433)
> > > > >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> > > > >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> > > > >     at
> > > > >     org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
> > > > >     at
> > > > >     org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
> > > > >     at
> > > > >     org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
> > > > >     at
> > > > >     org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
> > > > >     at
> > > > >     org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
> > > > >     at
> > > > >     org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
> > > > >     at
> > > > >     org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
> > > > >     at
> > > > >     org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
> > > > >     at
> > > > >     org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
> > > > >     at
> > > > >     org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
> > > > >     at
> > > > >     org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:261)
> > > > >     at
> > > > >     org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:360)
> > > > >     at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:604)
> > > > >     at
> > > > >     org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:562)
> > > > >     at
> > > > >     org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:679)
> > > > >     at
> > > > >     org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
> > > > >     at java.lang.Thread.run(Thread.java:534)
> > > > >
> > > > >So I suppose the question is, how effecient is ServletOutputStream?
 When
> > > > >I use an FileOutputStream, very little memory is required.
> > > > >
> > > > >-L
> > > > >
> > > > >On Sat, May 07, 2005 at 11:43:03AM +0300, Ilkka Priha wrote:
> > > > >
> > > > >>Maybe you are not referring to this memory eating template directly
from
> > > > >>VelocityServlet, but through some tool, #include, etc., which
uses a
> > > > >>nested StringWriter and not the servlet's OutputStreamWriter directly.
> > > > >>According to your first post, the original oom exception was thrown
by
> > > > >>the Velocity Struts Tiles tool...
> > > > >>
> > > > >>-- Ilkka
> > > > >>
> > > > >>
> > > > >>lawrence@marchex.com wrote:
> > > > >>
> > > > >>>Ok now I'm confused (suprise, suprise!).   I looked at the
source for
> > > > >>>VelocityServlet, and mergeTemplate has:
> > > > >>>
> > > > >>>vw = (VelocityWriter) writerPool.get();
> > > > >>>
> > > > >>>if (vw == null)
> > > > >>>{
> > > > >>>  vw = new VelocityWriter(new OutputStreamWriter(output, encoding),4
*
> > > > >>>  1024, true);
> > > > >>>}
> > > > >>>else
> > > > >>>{
> > > > >>>  vw.recycle(new OutputStreamWriter(output, encoding));
> > > > >>>}
> > > > >>>template.merge(context, vw);
> > > > >>>
> > > > >>>===
> > > > >>>
> > > > >>>So the VelocityServlet DOES use OutputStreamWriter already
... so then
> > > > >>>why does it still utilize so much memory?
> > > > >>>
> > > > >>>-L
> > > > >>>
> > > > >>>On Fri, May 06, 2005 at 02:02:07PM -0700, lawrence@marchex.com
wrote:
> > > > >>>
> > > > >>>
> > > > >>>>Alright, I changed the Writer to be:
> > > > >>>>
> > > > >>>>OutputStreamWriter w = new OutputStreamWriter(new
> > > > >>>>FileOutputStream("test.html"));
> > > > >>>>
> > > > >>>>And this fixes the memory problem.
> > > > >>>>
> > > > >>>>However, my application is running Velocity as a servlet,
how should I
> > > > >>>>extend the VelocityServlet to use an OutputStreamWriter
intead of a
> > > > >>>>StringWriter?  Should I post a different email thread
about this?
> > > > >>>>
> > > > >>>>-L
> > > > >>>>
> > > > >>>>On Fri, May 06, 2005 at 01:59:19PM -0700, David You wrote:
> > > > >>>>
> > > > >>>>
> > > > >>>>>Well, Open a file, use a FileWriter.
> > > > >>>>>
> > > > >>>>>David
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>-----Original Message-----
> > > > >>>>>From: lawrence@marchex.com [mailto:lawrence@marchex.com]
> > > > >>>>>Sent: Friday, May 06, 2005 1:48 PM
> > > > >>>>>To: Velocity Users List
> > > > >>>>>Subject: Re: OutOfMemoryException Processing Velocity
Template
> > > > >>>>>
> > > > >>>>>I printed out the available memory before and after
I call
> > > > >>>>>"mergeTemplate":
> > > > >>>>>
> > > > >>>>>Free memory before merge: 217393352
> > > > >>>>>Free memory after merge: 16271392
> > > > >>>>>
> > > > >>>>>so I would assume the StringWriter is approximately
200MB after the
> > > > >>>>>merge.   What should I use/do instead?
> > > > >>>>>
> > > > >>>>>-Lawrence
> > > > >>>>>
> > > > >>>>>On Fri, May 06, 2005 at 01:43:50PM -0700, David You
wrote:
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>>Why do you use StringWriter? That is cached in
the memory.
> > > > >>>>>>How big is the StringWriter after the merge?
> > > > >>>>>>
> > > > >>>>>>David
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>>-----Original Message-----
> > > > >>>>>>From: lawrence@marchex.com [mailto:lawrence@marchex.com]
> > > > >>>>>>Sent: Friday, May 06, 2005 1:22 PM
> > > > >>>>>>To: Velocity Users List
> > > > >>>>>>Subject: Re: OutOfMemoryException Processing Velocity
Template
> > > > >>>>>>
> > > > >>>>>>Alright, I ran this little piece of code:
> > > > >>>>>>
> > > > >>>>>>public static void main( String args[] ) throws
Exception
> > > > >>>>>> {
> > > > >>>>>>     /* first, we init the runtime engine.  Defaults
are fine. */
> > > > >>>>>>
> > > > >>>>>>     Velocity.init();
> > > > >>>>>>
> > > > >>>>>>     /* lets make a Context and put data into
it */
> > > > >>>>>>
> > > > >>>>>>     VelocityContext context = new VelocityContext();
> > > > >>>>>>
> > > > >>>>>>     List results = ReportBean.runLargeReport();
> > > > >>>>>>
> > > > >>>>>>     context.put("List", results);
> > > > >>>>>>
> > > > >>>>>>     /* lets render a template */
> > > > >>>>>>
> > > > >>>>>>     StringWriter w = new StringWriter();
> > > > >>>>>>
> > > > >>>>>>     Velocity.mergeTemplate("/myfile.vm", context,
w );
> > > > >>>>>>     System.out.println(" template : " + w );
> > > > >>>>>>
> > > > >>>>>>     /* lets make our own string to render */
> > > > >>>>>> }
> > > > >>>>>>
> > > > >>>>>>results is a List of 66000 objects and requires
about 8megs of memory.
> > > > >>>>>>The "mergeTemplate" requires at least 230 MB of
memory.   Any
> > > > >>>>>>suggestions?
> > > > >>>>>>
> > > > >>>>>>-L
> > > > >>>>>>
> > > > >>>>>>On Fri, May 06, 2005 at 11:53:30AM -0700, jian
chen wrote:
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>>>Hi,
> > > > >>>>>>>
> > > > >>>>>>>I guess the writer Ilkka talked about is when
using Velocity as a
> > > > >>>>>>>standalone template engine.
> > > > >>>>>>>
> > > > >>>>>>>Right now I don't have a good clue, could
you run Velocity as a
> > > > >>>>>>>standalone template engine and render the
page to see if there is a
> > > > >>>>>>>huge memory usage?
> > > > >>>>>>>
> > > > >>>>>>>Cheers,
> > > > >>>>>>>
> > > > >>>>>>>Jian
> > > > >>>>>>>
> > > > >>>>>>>On 5/6/05, lawrence@marchex.com <lawrence@marchex.com>
wrote:
> > > > >>>>>>>
> > > > >>>>>>>
> > > > >>>>>>>>Sorry, I'm not sure what you mean by what
"kind of writer" I'm
> > > > >>>>>>
> > > > >>>>>>using.   Where would I find out?   How would I
change this (to maybe a
> > > > >>>>>>StringBuffer writer?)
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>>>>Also, each column contains a String that
is at most, 200
> > > > >>>>>
> > > > >>>>>characters,
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>>most are closer to 10-20.   There are a total
of 10 columns.
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>>>>Thanks.
> > > > >>>>>>>>
> > > > >>>>>>>>-Lawrence
> > > > >>>>>>>>
> > > > >>>>>>>>On Fri, May 06, 2005 at 09:11:13PM +0300,
Ilkka Priha wrote:
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>>>>What kind of writer are you using
and how long are the items? 66
> > > > >>>>>>
> > > > >>>>>>000 HTML
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>>>>>table rows with 5 numeric columns
consumes about 32 MB when
> > > > >>>>>>
> > > > >>>>>>buffered into a
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>>>>>string writer. If the items are longer,
it takes much more
> > > > >>>>>
> > > > >>>>>memory.
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>>>>>-- Ilkka
> > > > >>>>>>>>>
> > > > >>>>>>>>>
> > > > >>>>>>>>>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
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>>---------------------------------------------------------------------
> > > > >>>>>>
> > > > >>>>>>
> > > > >>>>>>>>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
> > > > >>>>
> > > > >>>>---------------------------------------------------------------------
> > > > >>>>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
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > 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