<map name="eoy.band">
<in-memory-format>BINARY</in-memory-format>
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>345600</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<eviction-policy>NONE</eviction-policy>
<max-size policy="PER_NODE">0</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>100</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
<map-store enabled="true">
<class-name>com.ibm.ug.hz.EoyBandStore</class-name>
<write-delay-seconds>5</write-delay-seconds>
<write-batch-size>100</write-batch-size>
<write-coalescing>true</write-coalescing>
</map-store>
</map>
With binary objects are serialized into Record instances which in turn hold byte-arrays. Lets say your objects being cached hold in average 20 references. It's almost certain that these objects will end up in old generation, so if you cache 1 million objects, full gcs will have to take care of roughly 21 Million objects if using in-memory format. On the other hand if each of these objects are converted into byte arrays, gc has to take care of ~ 2 Million objects only, but you end up paying the price of deserialization to convert back these arrays to the original objects.
If your application is mostly stateless, that is, the amount of data that lands on the old gen is fixed, regardless of the number of users, in-memory is the way to go, otherwise, go for binary, unless the Object graphs being cached are very simple.