/** * Forces a garbage collection. * @static * @return void */ public static function collectGarbage($keepItems = array()) { // close mysql-connection Db::close(); $protectedItems = array("Zend_Locale", "Zend_View_Helper_Placeholder_Registry", "Zend_View_Helper_Doctype", "Zend_Translate", "Zend_Navigation", "Pimcore_API_Plugin_Broker", "pimcore_tag_block_current", "pimcore_tag_block_numeration", "Config_system", "pimcore_admin_user", "Config_website", "pimcore_editmode", "pimcore_error_document", "pimcore_site", "Pimcore_Db"); if (is_array($keepItems) && count($keepItems) > 0) { $protectedItems = array_merge($protectedItems, $keepItems); } if (is_array(self::$globallyProtectedItems) && count(self::$globallyProtectedItems)) { $protectedItems = array_merge($protectedItems, self::$globallyProtectedItems); } $registryBackup = array(); foreach ($protectedItems as $item) { if (\Zend_Registry::isRegistered($item)) { $registryBackup[$item] = \Zend_Registry::get($item); } } \Zend_Registry::_unsetInstance(); foreach ($registryBackup as $key => $value) { \Zend_Registry::set($key, $value); } Db::reset(); // force PHP garbage collector gc_enable(); $collectedCycles = gc_collect_cycles(); \Logger::debug("garbage collection finished, collected cycles: " . $collectedCycles); }