More memory efficient bitset implementation(s)
----------------------------------------------

                 Key: THRIFT-974
                 URL: https://issues.apache.org/jira/browse/THRIFT-974
             Project: Thrift
          Issue Type: Improvement
          Components: Java - Compiler, Java - Library
    Affects Versions: 0.5, 0.4, 0.3
            Reporter: Bryan Duxbury


Some comments on THRIFT-872 got me to thinking about the bitset implementation 
we use to handle isset. It seems like the minimum amount of memory we can use 
to store isset today is 28 bytes - 8 for the reference to the bitset, 8 for the 
reference to the long[] inside, 8 for the long itself, and 4 for the array 
size. (This assumes a 64-bit JVM.) For structs with a small number of fields in 
isset, we can do better than this in a number of ways. 

One option would be to make a new bitset implementation for "small" bitsets 
that was backed by one long field rather than a long[1]. This would cut the 
cost down to 16 bytes for up to 64 isset fields, which I suspect covers most 
people's structs.

If we're willing to break encapsulation a little bit, another option would be 
to just keep the long field in the containing struct itself. That would shave 
another 8 bytes off. However, it would make the implementation more messy.

In any case, we can hide all this implementation interaction behind the isXSet 
methods we already generate and let the generator decide how to optimize and 
compile-time.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to