This patch is pretty cool. I think I also would like to see it in a ticket, and I'd like to make sure we have test cases that cover all of this new variety of possible implementations.
-Bryan On Fri, Dec 16, 2011 at 4:47 PM, Brian Bloniarz <[email protected]>wrote: > Hi, I have a small patch for Java to optimize the heapspace footprint > of (for example): > > struct OptIntPair { > 1: i32 a > 2: i32 b > } > > Each instance will have an __isset_bit_vector which points to a BitSet, > which points to a long[], adding around 50 bytes of overhead to this > object. > > The patch changes this by storing a raw byte and doing direct bitfield > operations, like: > byte __isset_bitfield; > > public void unsetB() { > __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, > __B_ISSET_ID); > } > A little nasty, but a big space win: on my machine, this brings down the > total > size of an OptIntPair from 85 bytes to 25 bytes. A BitSet gets used as a > fallback > when more than 64 __isset entries are needed. > > Is this something that could be considered? The patch is attached. Other > people have > mentioned this shortcoming before, see slide 22 of: > > http://www.slideshare.net/aszegedi/everything-i-ever-learned-about-jvm-performance-tuning-twitter > > Thanks for such useful software, > Brian Bloniarz >
