Such daemon would probably evict the entries quite soon, as JVM's heap is about to fill up, find out that there's ton of garbage and release it. Runtime.freeMemory() does not tell you the total size of living objects. That's why Infinispan implements the memory-based eviction, estimating the size entries really occupy in memory, and allows you to set the max total size you'd like to keep in the memory (you have already set -Xmx and -Xms, so make the actively-hold size about 50% to give JVM some space - and don't forget how many backup copies the nodes hold).
If you want to find it out the hard way you can use cache.getAdvancedCache().getDistributionManager() to find out which entries are where, and/or use cache.withFlags(Flag.CACHE_MODE_LOCAL) to execute operations that don't span to another nodes (e.g. if you want to iterate through local entries).