Add gc_mem_caches() call for PHP7 after itoken_get_all() as new memory manager will not release small buckets to OS automatically

This commit is contained in:
Peter Ward 2016-01-15 08:12:11 +00:00 committed by Nicolas Grekas
parent d1f72d8ef4
commit e555aade12
5 changed files with 29 additions and 1 deletions

View File

@ -61,6 +61,11 @@ class PhpExtractor implements ExtractorInterface
$files = $finder->files()->name('*.php')->in($directory); $files = $finder->files()->name('*.php')->in($directory);
foreach ($files as $file) { foreach ($files as $file) {
$this->parseTokens(token_get_all(file_get_contents($file)), $catalog); $this->parseTokens(token_get_all(file_get_contents($file)), $catalog);
if (PHP_VERSION_ID >= 70000) {
// PHP 7 memory manager will not release after token_get_all(), see https://bugs.php.net/70098
gc_mem_caches();
}
} }
} }

View File

@ -193,7 +193,15 @@ class ClassCollectionLoader
$rawChunk .= "}\n"; $rawChunk .= "}\n";
} }
return $output.self::compressCode($rawChunk); $output .= self::compressCode($rawChunk);
if (PHP_VERSION_ID >= 70000) {
// PHP 7 memory manager will not release after token_get_all(), see https://bugs.php.net/70098
unset($tokens, $rawChunk);
gc_mem_caches();
}
return $output;
} }
/** /**

View File

@ -72,6 +72,11 @@ class ClassMapGenerator
$classes = self::findClasses($path); $classes = self::findClasses($path);
if (PHP_VERSION_ID >= 70000) {
// PHP 7 memory manager will not release after token_get_all(), see https://bugs.php.net/70098
gc_mem_caches();
}
foreach ($classes as $class) { foreach ($classes as $class) {
$map[$class] = $path; $map[$class] = $path;
} }

View File

@ -733,6 +733,12 @@ abstract class Kernel implements KernelInterface, TerminableInterface
$output .= $rawChunk; $output .= $rawChunk;
if (PHP_VERSION_ID >= 70000) {
// PHP 7 memory manager will not release after token_get_all(), see https://bugs.php.net/70098
unset($tokens, $rawChunk);
gc_mem_caches();
}
return $output; return $output;
} }

View File

@ -64,6 +64,10 @@ class AnnotationFileLoader extends FileLoader
$collection->addResource(new FileResource($path)); $collection->addResource(new FileResource($path));
$collection->addCollection($this->loader->load($class, $type)); $collection->addCollection($this->loader->load($class, $type));
} }
if (PHP_VERSION_ID >= 70000) {
// PHP 7 memory manager will not release after token_get_all(), see https://bugs.php.net/70098
gc_mem_caches();
}
return $collection; return $collection;
} }