code: public static Client createClient(ClientConfig config) {
          Client client = null;
          synchronized (ClientFactory.class) {
              if (!m_preserveResources && ++m_activeClientCount == 1) {
                  VoltLogger.startAsynchronousLogging();
                  EstTimeUpdater.start();
                  ReverseDNSCache.start();
              }
          }
          client = new ClientImpl(config);
          return client;
      }
docs: <p>Recommended method for creating a client. Using a ClientConfig object ensures
  that a client application is isolated from changes to the configuration options.
  Authentication credentials are provided at construction time with this method
  instead of when invoking createConnection.</p>
  
  @param config A ClientConfig object specifying what type of client to create
  @return A configured client