File tree Expand file tree Collapse file tree
objectbox-java/src/main/java/io/objectbox/converter Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1111import java .util .List ;
1212import java .util .Map ;
1313import java .util .Map .Entry ;
14+ import java .util .concurrent .atomic .AtomicReference ;
1415
1516/**
1617 * Converts between {@link Map} properties and byte arrays using FlexBuffers.
2324 */
2425public abstract class FlexMapConverter implements PropertyConverter <Map <Object , Object >, byte []> {
2526
27+ private static final AtomicReference <FlexBuffersBuilder > cachedBuilder = new AtomicReference <>();
28+
2629 @ Override
2730 public byte [] convertToDatabaseValue (Map <Object , Object > map ) {
2831 if (map == null ) return null ;
2932
30- FlexBuffersBuilder builder = new FlexBuffersBuilder (
31- new ArrayReadWriteBuf (512 ),
32- FlexBuffersBuilder .BUILDER_FLAG_SHARE_KEYS_AND_STRINGS
33- );
33+ FlexBuffersBuilder builder = cachedBuilder .getAndSet (null );
34+ if (builder == null ) {
35+ builder = new FlexBuffersBuilder (
36+ new ArrayReadWriteBuf (512 ),
37+ FlexBuffersBuilder .BUILDER_FLAG_SHARE_KEYS_AND_STRINGS
38+ );
39+ }
3440
3541 addMap (builder , null , map );
3642
3743 ByteBuffer buffer = builder .finish ();
3844
3945 byte [] out = new byte [buffer .limit ()];
4046 buffer .get (out );
47+
48+ // Cache if builder does not consume too much memory
49+ if (buffer .limit () <= 256 * 1024 ) {
50+ builder .clear ();
51+ cachedBuilder .getAndSet (builder );
52+ }
53+
4154 return out ;
4255 }
4356
You can’t perform that action at this time.
0 commit comments