Re: [rvm-research] spare one bit from the object header
王晨曦 <[email protected]> Wed, 30 Sep 2015 14:51:15 +0800
| Newsgroups | gmane.comp.java.jikes.rvm.devel |
|---|---|
| Message-ID | <[email protected]> |
ok,thanks for your comments. I will consider your suggestions. > 在 2015年9月30日,上午1:23,Michael Bond <[email protected]> 写道: > > Dear Fellow Bit Stealer, > > I believe I've run into the same issue before, but I don't know what's > the reason for it. Two ideas: > > (1) Perhaps the current implementation of thin locks relies on having > the full 22 bits, and giving it just 21 bits means it still spills over > into the stolen bit? See ThinLockConstants to try to figure that out? > (This would imply that !ADDRESS_BASED_HASHING configs doesn't work > correctly, although it might be hard to tell since hash codes would be > subtly messed up.) > > (2) Perhaps there's some other assumption in the thin locks > implementation about how many / which bits are available. Have you > considered trying to steal the high bit instead: > > * OTTT TTTT TTTT TTTT TTTT TTHH AAAA AAAA > > by changing only NUM_THIN_LOCK_BITS but not THIN_LOCK_SHIFT. > > However, depending on what you're using the stolen bit for, I think that > might introduce concurrency issues if the thin locks implementation is > relying on being able to do non-CAS accesses to the high 16 bits of the > status word. > > An alternative to stealing a thin lock bit is to steal one of the GC bits: > > * TTTT TTTT TTTT TTTT TTTT TTHH OAAA AAAA > > which requires ensuring that GC does not use all 8 bits. I believe the > default GenImmix uses all 8 by default, but you can tell it to use 7 > instead. > > Cheers, > Mike > > On 09/29/2015 07:36 AM, 王晨曦 wrote: >> Hi, every one. >> >> I want to spare one bit as a flag to mark some particular object from the thin lock bits used in the object header. >> In the production configuration ,the ADDRESS_BASED_HASHING is true. >> so the object header looks like: >> * TTTT TTTT TTTT TTTT TTTT TOHH AAAA AAAA >> the bit marked by ‘O’ is the bit I want to spare. >> >> I modified the thin lock definitions: >> /** How many bits are allocated to a thin lock? */ >> public static final int NUM_THIN_LOCK_BITS = ADDRESS_BASED_HASHING ? 21 : 19; >> >> /** How many bits to shift to get the thin lock? */ >> public static final int THIN_LOCK_SHIFT = ADDRESS_BASED_HASHING ? 11 : 13; >> >> >> But ,In GenNurseryTraceLocal.java traceObject() method. >> I find that ,the spared bit ‘O’ can be set by something I don’t know. >> >> the check code in the traceObject(): >> >> Word objWordVal = VM.objectModel.readAvailableBitsWord(object); >> Log.write("object header word value:"); >> Log.writeln(objWordVal); >> >> >> and the the print info is : >> 1871 object header word value:0x6e00859f // …. 0101 1001 1111 >> >> 1876 object header word value:0x6e009dfb // …. 1101 1111 1011 >> >> we can see that the spared bit may be set by something. >> So,my question is who set this spared bit ? >> I checked that the thin lock count bits, it is reduced 1 bit, and I think the thin lock will not use this bit. >> >> Any response is helpful, thank you. >> ------------------------------------------------------------------------------ >> _______________________________________________ >> Jikesrvm-researchers mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers > > > ------------------------------------------------------------------------------ > _______________________________________________ > Jikesrvm-researchers mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers ------------------------------------------------------------------------------ _______________________________________________ Jikesrvm-researchers mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers