[rvm-research] Immix with a split mature space
Shoaib Akram <[email protected]> Fri, 28 Oct 2016 20:11:27 +0200
| Newsgroups | gmane.comp.java.jikes.rvm.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi All, I am writing from Ghent University in Belgium. I am modifying the generational variant of the Immix collector in JikesRVM as part of a research project. The idea is to have two mature spaces: immix-A and immix-B. During a full-heap collection, I plan to use various heuristics to move objects between the two spaces. Nursery collections always evacuate objects to immix-A. During a full-heap collection, I piggyback on the utility functions to support the opportunistic defragmentation mechanism in Immix to move objects from A to B (basically calling the traceObjectWithOpportunisticCopy() method in ImmixSpace.java and supplying the allocator reserved for mature major GC of B). Using a verbose level of 5, I observe that after the first full heap collection, objects have been copied from A to B as reported in the "After Collection" statistics. However, when the mutator threads resume after collection, JikesRVM terminates abruptly without printing the stack trace. The last message reported in the logs is "[STWController: Resuming mutators…].” I took the following steps when modifying the generational Immix collector: (1) I declared descriptors for the new allocators in Gen.java. For instance, ALLOC_MATURE_MINORGC_A, ALLOC_MATURE_MAJORGCA, and so on. (2) I updated traceObject() in GenNurseryTraceLocal to use the right allocator for evacuation to mature space (Gen.ALLOC_MATURE_MINORGC_A). (3) I updated traceObject() in GenMatureTraceLocal to use the right allocator in case an object is to be traced in nursery trace during mature space collection (Gen.ALLOC_MATURE_MAJORGC_A). (4) In GenImmix.java: (1) I declared the two mature spaces and their corresponding descriptors, (2) declared the Trace variables per space (matureTrace_A and matureTrace_B), (3) made the appropriate changes to collectionPhase() calling the prepare() and release() functions in collectionPhase(), (4) and updated the other functions whenever necessary. (5) In GenImmixCollector, I rewrote allocCopy(). The main modification is that if the allocator is ALLOC_MATURE_MAJORGC_A or ALLOC_MATURE_MAJORGC_B, and depending upon a heuristic, I call the alloc() function of the instance of ImmixAllocator associated with A or B. In the same class, I declared two instances of GenImmixMatureTraceLocal, and call the prepare(), completeTrace(), and release() methods at appropriate points in collectionPhase(). Not many changes to GenImmixMutator.java since currently, no pretenuring happens anyway. I did create two instances of MutatorLocal and call their prepare() and release() functions in collectionPhase(). Can anyone with experience with this part of JikesRVM see what is missing in my modifications? Is it possible that the references being made by the mutator threads - once the full heap collection is finished - can’t be resolved anymore because of the presence of two mature spaces? Regards, Shoaib. ------------------------------------------------------------------------------ The Command Line: Reinvented for Modern Developers Did the resurgence of CLI tooling catch you by surprise? Reconnect with the command line and become more productive. Learn the new .NET and ASP.NET CLI. Get your free copy! http://sdm.link/telerik _______________________________________________ Jikesrvm-researchers mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers