The JVMTITagMap hashes oops by casts them to 32-bit unsigned integers. For ZGC, which has colored oop, this happens to work because all metadata bits are above 32-bit. In theory, ZGC could store its metadata bits in the lower 32-bit part of the address, in which case this hash scheme would break. Today we have an ugly assert in JvmtiTagHashmap::hash() to make sure this doesn't happen. However, the JVMITagMap should not make assumptions on what an oop looks like, and should instead delegate this hashing to CollectedHeap.