[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    RFR: 8283710: JVMTI: GC abstraction for ObjectMarker
From:       Roman Kennke <rkennke () openjdk ! java ! net>
Date:       2022-03-28 13:29:12
Message-ID: UxcHM_Gf2LCunhE5hrwW1trwz3D9lFfptDDuQOBZ9N0=.3c3077f5-e501-4ef1-8f37-b70bf8510d87 () github ! com
[Download RAW message or body]

JVMTI heap walking marks objects in order to track which have been visited already. \
In order to do that, it uses bits in the object header. Those are the same bits that \
are also used by some GCs to mark objects (the lowest two bits, also used by locking \
code). Some GCs also use the bits in order to indicate 'forwarded' objects, where the \
upper bits of the header represent the forward-pointer. In the case of Shenandoah, \
it's even more problematic because this happens concurrently, even while JVMTI heap \
walks can intercept. So far we carefully worked around that problem, but it becomes \
very problematic in Lilliput, where accesses to the Klass* also requires to decode \
the header, and figure out what bits means what.

Taking a step back, it should not be JVMTI's business to mess with GC marking bits. \
Instead, the GC should provide this functionality to JVMTI, and implement it in a way \
that is suitable for the active GC. For example, in Shenandoah GC we would probably \
rather use a marking bitmap instead of letting JVMTI mark in the object header.

I would like to propose a GC abstraction to enable this. The proposed change provides \
an abstract class ObjectMarker, a single implementation HeaderObjectMarker \
(https://github.com/openjdk/lilliput/pull/45 proposes another implementation that \
uses bitmaps) and an ObjectMarkerController which manages the lifecycle. IMO, this is \
cleaner than the current impl in jvmtiTagMap, it keeps all state in the ObjectMarker \
implementation, rather than using global state and separates concerns better.

Testing:
 - [x] tier1
 - [x] tier2
 - [ ] tier3

-------------

Commit messages:
 - Restore missing include
 - Simpler needs_reset handling
 - 8283710: JVMTI: GC abstraction for ObjectMarker

Changes: https://git.openjdk.java.net/jdk/pull/7964/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=7964&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8283710
  Stats: 361 lines in 5 files changed: 222 ins; 133 del; 6 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7964.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7964/head:pull/7964

PR: https://git.openjdk.java.net/jdk/pull/7964


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic