This is an advanced topic/feature that will not be of interest to most users.

You can affect which elements are selected for eviction from the cache by providing a class that implements the org.ehcache.config.EvictionAdvisor interface.

EvictionAdvisor implementations are invoked when Ehcache is attempting to evict entries from the cache (in order to make room for new entries) in order to determine whether the given entry should not be considered a good candidate for eviction. If the eviction is advised against, Ehcache will try to honor the preference of preserving that entry in the cache, though there is no full guarantee of such.

CacheConfiguration<Long, String> cacheConfiguration = CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
                                                                                    ResourcePoolsBuilder.heap(2L)) (1)
    .withEvictionAdvisor(new OddKeysEvictionAdvisor<Long, String>()) (2)

CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
    .withCache("cache", cacheConfiguration)

Cache<Long, String> cache = cacheManager.getCache("cache", Long.class, String.class);

// Work with the cache
cache.put(42L, "The Answer!");
cache.put(41L, "The wrong Answer!");
cache.put(39L, "The other wrong Answer!");

1 Configure a constrained heap, as the eviction advisor is only relevant when mappings get evicted from the cache.
2 If you want to hint the eviction algorithm to advisor against the eviction of some mappings, you have to configure an instance of EvictionAdvisor.

In this particular example, the OddKeysEvictionAdvisor class will advise against eviction of any key that is an odd number. The cache is constrained to only be allowed to contain two entries, however the code has put three entries into the cache - which will trigger capacity eviction. By the time the cache manager gets closed, only mappings with odd keys should be left in the cache as their prime candidacy for eviction would have been advised against.

Eviction advise status is computed when a mapping is written to the cache. This means that proper eviction advisor implementations are expected to be constant for a key-value pair.
Please keep in mind that configuring an eviction advisor can slow down eviction: the more often you advise against eviction, the harder the cache has to work to evict an element when room is required. After a certain time, if a cache determines that the configured eviction advisor rejected too many eviction candidates, the cache can decide to completely bypass the eviction advisor and evict anything it sees fit.