History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: RVM-281
Type: New Feature New Feature
Status: Open Open
Priority: Minor Minor
Assignee: Ian Rogers
Reporter: Ian Rogers
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
RVM

Bidirectional object model

Created: 02/Oct/07 07:59 AM   Updated: 11/Apr/08 09:29 AM
Component/s: Runtime: Object Model
Affects Version/s: None
Fix Version/s: 1000

Time Tracking:
Not Specified

Issue Links:
dependent
 


 Description  « Hide
Bidirectional object models are well known in the literature and implementations have been made in the RVM by Dayong Gu at McGill and by the guys at ANU. I intend to create a branch so that we can work on creating a stable bidirectional object model to merge back into the trunk.

 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
David Grove - 02/Oct/07 10:35 AM
There's nothing wrong with supporting a bidirectional object model as an option (generality, has been published before, etc).

I'm skeptical it's actually going to improve on the default sufficiently to justify the added complexity of parsing a bi-directional heap. The usual motivation for a bidirectional object model in Java is optimizing GC tracing operations, but as far as I know, no one has evaluated the bidirectional optimized tracing vs. a properly optimized tracing routine for a unidirectional object model. Been wrong before though...


Robin Garner - 02/Oct/07 11:50 PM
The bidirectional object model was one data point in the scanning method survey that Daniel, Steve and I did earlier this year. It performed pretty badly, which is why we committed specialization instead.

Ian Rogers - 03/Oct/07 02:53 AM
Yes, I'm not expecting this to improve performance, it's more for completeness - I have an other need

Ian Rogers - 07/Oct/07 11:18 AM
For moving GCs, we iterate over all objects in a space to update forwarding pointers to the pointer they forward to. To detect when we've scanned all the pointers we need to identify words belonging to the object header (the normal object model records all offsets of pointers in a structure of off the TIB and so implicitly knows the header and reference offsets). A bit in the status word or detecting the TIB can be used to identify when we've reached the object header in the bidirectional object model.