How does Apache Ignite do memory allocation to avoid memory fragmentation, specifically I'm trying to compare Ignite's approach to Redis's (jemalloc) approach.
Apache Ignite uses Durable Memory instead of heap allocation. This means there are no fragmentation issues in malloc sense. It splits memory into 4k pages and writes stored data to pages, recycling them as needed.
Even if it didn't, Ignite uses Java, which has relocating GC and thus not vulnerable to memory fragmentation - it can always compact its heap. But it may also result in GC pauses, which we avoid by having Durable Memory.
It is possible that page memory itself will be fragmented, hence we have fillFactor
metric to track this.