@Override public <K, V> OffHeapStore<K, V> createStore( Configuration<K, V> storeConfig, ServiceConfiguration<?>... serviceConfigs) { TimeSourceConfiguration timeSourceConfig = findSingletonAmongst(TimeSourceConfiguration.class, (Object[]) serviceConfigs); TimeSource timeSource = timeSourceConfig != null ? timeSourceConfig.getTimeSource() : SystemTimeSource.INSTANCE; if (serviceProvider == null) { throw new RuntimeException("ServiceProvider is null."); } SerializationProvider serializationProvider = serviceProvider.findService(SerializationProvider.class); Serializer<K> keySerializer = serializationProvider.createKeySerializer( storeConfig.getKeyType(), storeConfig.getClassLoader(), serviceConfigs); Serializer<V> valueSerializer = serializationProvider.createValueSerializer( storeConfig.getValueType(), storeConfig.getClassLoader(), serviceConfigs); ResourcePool offHeapPool = storeConfig.getResourcePools().getPoolForResource(ResourceType.Core.OFFHEAP); if (!(offHeapPool.getUnit() instanceof MemoryUnit)) { throw new IllegalArgumentException("OffHeapStore only supports resources with memory unit"); } MemoryUnit unit = (MemoryUnit) offHeapPool.getUnit(); OffHeapStore<K, V> offHeapStore = new OffHeapStore<K, V>( storeConfig, keySerializer, valueSerializer, timeSource, unit.toBytes(offHeapPool.getSize())); createdStores.add(offHeapStore); return offHeapStore; }