On 5/31/06, Antoine Reilles <[EMAIL PROTECTED]> wrote:
Also, if I change the build to avoid the use of subant, by inlining all
subprocesses, the build goes farther, since it loads all tom's compiler
classes only once, instead of once for each subant part.

Using <subant>, just like <ant>, creates a new project, which
duplicates the property and reference maps, and probably other stuff
too. It's not surprising it's taking more memory than using a single
project. Ant (and SubAnt, which just re-uses Ant) was an afterthought
it looks to me, and is thus very inefficient memory-wise.

OTOH, I don't think the classes are reloaded. I don't see why the new
project would need to create a new class loader and reload the
classes.

I'm not sure whether the sub-project shares its ComponentHelper with
its parent project.

We are still looking for memory problems in tom, but it looks like tom
is not the only one at fault there.

Probably not. Ideally there would be a fork attribute for <ant> (and
<subant>) to ensure each sub-build runs in its own VM, ensuring proper
release of memory (when the process exists), but it's never been done
and is non-trivial, since a cross-process logger/listener thing needs
to be put in place, and what to do with references? Serialize them to
the sub-project? Not much is serializable in Ant.

To solve your problem, you may have to switch to <apply>, which forks
a new Ant JVM for each sub-build (in non-parallel mode), which would
emulate fork=true for <ant>. --DD

PS: The fact that it still OOME even with inline compiles kinda
indicates the memory used by Tom for an earlier compile is not
released when memory is getting scarce, so strong ref. to big data is
still being help on to. That's the same symptom as Javac used to
exhibit before 1.4.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to