code: @VisibleForTesting
      public static ServiceBuilder newInMemoryBuilder(ServiceBuilderConfig builderConfig, ExecutorBuilder executorBuilder) {
          ServiceConfig serviceConfig = builderConfig.getConfig(ServiceConfig::builder);
          ServiceBuilder builder;
          if (serviceConfig.isReadOnlySegmentStore()) {
              // Only components required for ReadOnly SegmentStore.
              builder = new ReadOnlyServiceBuilder(builderConfig, serviceConfig, executorBuilder);
          } else {
              // Components that are required for general SegmentStore.
              builder = new ServiceBuilder(builderConfig, serviceConfig, executorBuilder)
                      .withCacheFactory(setup -> new InMemoryCacheFactory());
          }
  
          // Components that are required for all types of SegmentStore.
          return builder
                  .withDataLogFactory(setup -> new InMemoryDurableDataLogFactory(setup.getCoreExecutor()))
                  .withContainerManager(setup -> new LocalSegmentContainerManager(
                          setup.getContainerRegistry(), setup.getSegmentToContainerMapper()))
                  .withStorageFactory(setup -> new InMemoryStorageFactory(setup.getStorageExecutor()))
                  .withStreamSegmentStore(setup -> new StreamSegmentService(setup.getContainerRegistry(),
                          setup.getSegmentToContainerMapper()));
  
      }
docs: Creates a new instance of the ServiceBuilder class which is contained in memory. Any data added to this service will
  be lost when the object is garbage collected or the process terminates.
  
  @param builderConfig   The ServiceBuilderConfig to use.
  @param executorBuilder A Function that, given a thread count and a pool name, creates a ScheduledExecutorService
  with the given number of threads that have the given name as prefix.
  @return The new instance of the ServiceBuilder.