code: func (cgc *containerGC) GarbageCollect(gcPolicy kubecontainer.ContainerGCPolicy, allSourcesReady bool, evictTerminatedPods bool) error {
  	errors := []error{}
  	// Remove evictable containers
  	if err := cgc.evictContainers(gcPolicy, allSourcesReady, evictTerminatedPods); err != nil {
  		errors = append(errors, err)
  	}
  
  	// Remove sandboxes with zero containers
  	if err := cgc.evictSandboxes(evictTerminatedPods); err != nil {
  		errors = append(errors, err)
  	}
  
  	// Remove pod sandbox log directory
  	if err := cgc.evictPodLogsDirectories(allSourcesReady); err != nil {
  		errors = append(errors, err)
  	}
  	return utilerrors.NewAggregate(errors)
  }
docs: // GarbageCollect removes dead containers using the specified container gc policy.
  // Note that gc policy is not applied to sandboxes. Sandboxes are only removed when they are
  // not ready and containing no containers.
  //
  // GarbageCollect consists of the following steps:
  // * gets evictable containers which are not active and created more than gcPolicy.MinAge ago.
  // * removes oldest dead containers for each pod by enforcing gcPolicy.MaxPerPodContainer.
  // * removes oldest dead containers by enforcing gcPolicy.MaxContainers.
  // * gets evictable sandboxes which are not ready and contains no containers.
  // * removes evictable sandboxes.