- gc_collect_cycles: documentation ( source)
- var_export: documentation ( source)
- memory_get_usage: documentation ( source)
<?php
class A
{
protected $_iterator;
protected $_appendIterator;
public function __construct($appendIterator = true)
{
$this->_appendIterator = $appendIterator;
$arrayIterator= new ArrayIterator([$this, $this, $this, $this]);
if ($appendIterator)
{
$this->_iterator = new AppendIterator();
$this->_iterator->append($arrayIterator);
}
else
{
$this->_iterator = $arrayIterator;
}
}
public function __destruct()
{
echo 'destructing A::class(' . var_export($this->_appendIterator, true) .') ' . PHP_EOL;
}
}
echo "Running with AppendIterator(): " . PHP_EOL;
$mStart = memory_get_usage();
for ($i = 0; $i < 10; $i++)
new A();
echo memory_get_usage() - $mStart . " memory increase " . PHP_EOL;
echo "Running GC.." . PHP_EOL;
echo "Found " . gc_collect_cycles() . " cycles..." . PHP_EOL . PHP_EOL;
echo "Running without AppendIterator(): " . PHP_EOL;
$mStart = memory_get_usage();
for ($i = 0; $i < 10; $i++)
new A(false);
echo memory_get_usage() - $mStart . " memory increase " . PHP_EOL;
echo "Running GC.." . PHP_EOL;
echo "Found " . gc_collect_cycles() . " cycles..." . PHP_EOL;
echo "Done!" . PHP_EOL . PHP_EOL;