public function garbageCollection($scope = null, $maximumLifetime = null, $force = false)
    {
        // Default result
        $result = 0;

        // Get our active scope if no special one passed
        if ($scope === null) {
            $scope = $this->getScope();
        }

        // The maximum lifetime for the entry in seconds
        if ($maximumLifetime === null) {
            $maximumLifetime = $this->getGcMaximumLifetime();
        }

        // Start the randomizer ...
        srand(microtime(true));

        // Force || Time and probability based
        if (
            ($force) ||                                                                // Forced run
            (
                self::$gcLastRunTimestamp !== null &&                                  // Must be run and ...
                self::$gcLastRunTimestamp < (time() + $this->getGcProbabilityTime())   // ... more than 30 min. before
            ) ||
            (rand(1, 100) <= $this->gcProbability)                                     // or randomizer hit?
        ) {
            $result                   = $this->getContainer()->garbageCollection($scope, $maximumLifetime);
            self::$gcLastRunTimestamp = time();
        }

        return $result;
    }