private static KryoShimService load(final boolean forceReload) {
        // if the service is loaded and doesn't need reloading, simply return in
        if (null != cachedShimService && !forceReload)
            return cachedShimService;

        // if a service is already loaded, close it
        if (null != cachedShimService)
            cachedShimService.close();

        // if the configuration is null, try and load the configuration from System.properties
        if (null == configuration)
            configuration = SystemUtil.getSystemPropertiesConfiguration("tinkerpop", true);

        // get all of the shim services
        final ArrayList<KryoShimService> services = new ArrayList<>();
        final ServiceLoader<KryoShimService> serviceLoader = ServiceLoader.load(KryoShimService.class);
        synchronized (KryoShimServiceLoader.class) {
            if (forceReload) serviceLoader.reload();
            for (final KryoShimService kss : serviceLoader) {
                services.add(kss);
            }
        }
        // if a shim service class is specified in the configuration, use it -- else, priority-based
        if (configuration.containsKey(KRYO_SHIM_SERVICE)) {
            for (final KryoShimService kss : services) {
                if (kss.getClass().getCanonicalName().equals(configuration.getString(KRYO_SHIM_SERVICE))) {
                    log.info("Set KryoShimService to {} because of configuration {}={}",
                            kss.getClass().getSimpleName(),
                            KRYO_SHIM_SERVICE,
                            configuration.getString(KRYO_SHIM_SERVICE));
                    cachedShimService = kss;
                    break;
                }
            }
        } else {
            services.sort(KryoShimServiceComparator.INSTANCE);
            for (final KryoShimService kss : services) {
                log.debug("Found KryoShimService: {} (priority {})", kss.getClass().getCanonicalName(), kss.getPriority());
            }
            if (0 != services.size()) {
                cachedShimService = services.get(services.size() - 1);
                log.info("Set KryoShimService to {} because its priority value ({}) is the best available",
                        cachedShimService.getClass().getSimpleName(), cachedShimService.getPriority());
            }
        }

        // no shim service was available
        if (null == cachedShimService)
            throw new IllegalStateException("Unable to load KryoShimService");

        // once the shim service is defined, configure it
        log.info("Configuring KryoShimService {} with the following configuration:\n#######START########\n{}\n########END#########",
                cachedShimService.getClass().getCanonicalName(),
                ConfigurationUtils.toString(maskedConfiguration(configuration)));
        cachedShimService.applyConfiguration(configuration);
        return cachedShimService;
    }
Return a reference to the shim service.  This method may return a cached shim service
unless {@code forceReload} is true.  Calls to this method need not be externally
synchonized.

@param forceReload if false, this method may use its internal service cache; if true,
                   this method must ignore cache, and it must invoke {@link ServiceLoader#reload()}
                   before selecting a new service to return
@return the shim service
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/kryoshim/KryoShimServiceLoader.java