Re: [rvm-research] Why more heap required to finish Dacapo iteration runs?
Andreas Sewe <[email protected]>
| Newsgroups | gmane.comp.java.jikes.rvm.devel |
|---|---|
| Organization | Software Technology Group, TU Darmstadt |
| Message-ID | <[email protected]> |
Hi, > This problem is not in Jikes only, but also in Hotspot too. > More heap is required if run Dacapo benchmark more iteration numbers, > and this is different for different benchmarks. For example, > lusearch/xalan/avorora require an significant increase but others do not. > > Could some one give me some explanation, or link on this? of the top of my head, there could be several explanations: - Over time, the amount of JIT compiled code grows. At least on the meta-circular Jikes RVM, compiled code is part of the same heap (although kept in a different space therein) as application objects. I don't think this is the case in HotSpot, though, where compiled code is not kept in the heap controlled by -Xmx. - Over time, class metadata accumulates. This can happen if the benchmark generates classes (e.g., instances of Proxy) on the fly but either some instances or their ClassLoader are not garbage collected. Like compiled code, Jikes RVM also keeps class metadata in the same heap. Older releases of HotSpot used a different heap (called permgen space) for this kind of data, but AFAIK newer versions don't. - There is some kind of "leak", e.g., a map holding onto objects from a previous iteration that grows over time. To diagnose this, I would recommend comparing two heap dumps taken after different numbers of iteration to see of which classes the additional instances are (e.g., Map.Entry). Hope this helps. Andreas ------------------------------------------------------------------------------