3v4l.org

run code in 300+ PHP versions simultaneously
<?php class IteratorWithFilter { public $generator; public function __construct(array $data) { $this->generator = new \ArrayIterator($data); } public function filter(Closure $closure) { $closure = clone $closure; $closure = $closure->bindTo($this); $this->generator = new \CallbackFilterIterator($this->generator, static function () {}); $this->generator->cl = $closure; // this assignment prevents GC as well return $this; } } function createIterator(Closure $closure) { $iter = new IteratorWithFilter([['a'], ['b']]); return $iter->filter($closure); } function createClosure() { return function ($row) { return true; }; } $closure = createClosure(); for ($i = 0; $i < 50 * 1000; $i++) { createIterator($closure); if (($i % 1000) === 0) { // gc_collect_cycles(); // explicit GC does not help... echo round(memory_get_usage() / (1024 * 1024), 3) . " MiB\n"; } }
Output for 7.4.2 - 7.4.10
0.377 MiB 2.324 MiB 4.278 MiB 6.037 MiB 8.054 MiB 9.946 MiB 12.088 MiB 2.257 MiB 4.149 MiB 6.041 MiB 6.669 MiB 4.466 MiB 6.359 MiB 5.57 MiB 4.076 MiB 5.968 MiB 4.826 MiB 6.718 MiB 5.399 MiB 4.168 MiB 6.061 MiB 4.788 MiB 6.68 MiB 5.427 MiB 4.163 MiB 6.055 MiB 4.799 MiB 6.691 MiB 5.429 MiB 4.171 MiB 6.063 MiB 4.803 MiB 6.695 MiB 5.436 MiB 4.176 MiB 6.068 MiB 4.808 MiB 6.7 MiB 5.442 MiB 4.182 MiB 6.074 MiB 4.814 MiB 6.706 MiB 5.448 MiB 4.188 MiB 6.08 MiB 4.82 MiB 6.712 MiB 5.454 MiB 4.193 MiB
Output for 7.4.0 - 7.4.1
0.376 MiB 2.323 MiB 4.278 MiB 6.036 MiB 8.054 MiB 9.946 MiB 12.088 MiB 2.256 MiB 4.148 MiB 6.04 MiB 6.668 MiB 4.466 MiB 6.358 MiB 5.569 MiB 4.075 MiB 5.967 MiB 4.825 MiB 6.717 MiB 5.399 MiB 4.168 MiB 6.06 MiB 4.787 MiB 6.679 MiB 5.427 MiB 4.163 MiB 6.055 MiB 4.798 MiB 6.691 MiB 5.429 MiB 4.17 MiB 6.062 MiB 4.802 MiB 6.694 MiB 5.436 MiB 4.176 MiB 6.068 MiB 4.808 MiB 6.7 MiB 5.442 MiB 4.182 MiB 6.074 MiB 4.814 MiB 6.706 MiB 5.447 MiB 4.187 MiB 6.079 MiB 4.819 MiB 6.711 MiB 5.453 MiB 4.193 MiB
Output for 7.3.0 - 7.3.22
0.377 MiB 2.323 MiB 4.278 MiB 1.442 MiB 3.334 MiB 0.498 MiB 2.39 MiB 4.282 MiB 1.446 MiB 3.338 MiB 0.501 MiB 2.394 MiB 4.286 MiB 1.449 MiB 3.341 MiB 0.505 MiB 2.397 MiB 4.289 MiB 1.453 MiB 3.345 MiB 0.509 MiB 2.401 MiB 4.293 MiB 1.457 MiB 3.349 MiB 0.513 MiB 2.405 MiB 4.297 MiB 1.461 MiB 3.353 MiB 0.517 MiB 2.409 MiB 4.301 MiB 1.465 MiB 3.357 MiB 0.52 MiB 2.412 MiB 4.305 MiB 1.468 MiB 3.36 MiB 0.524 MiB 2.416 MiB 4.308 MiB 1.472 MiB 3.364 MiB 0.528 MiB 2.42 MiB 4.312 MiB 1.476 MiB 3.368 MiB
Output for 7.2.0 - 7.2.33
0.373 MiB 2.335 MiB 4.305 MiB 1.446 MiB 3.353 MiB 0.494 MiB 2.401 MiB 4.309 MiB 1.45 MiB 3.357 MiB 0.498 MiB 2.405 MiB 4.312 MiB 1.453 MiB 3.361 MiB 0.502 MiB 2.409 MiB 4.316 MiB 1.457 MiB 3.365 MiB 0.505 MiB 2.413 MiB 4.32 MiB 1.461 MiB 3.368 MiB 0.509 MiB 2.417 MiB 4.324 MiB 1.465 MiB 3.372 MiB 0.513 MiB 2.42 MiB 4.328 MiB 1.469 MiB 3.376 MiB 0.517 MiB 2.424 MiB 4.332 MiB 1.472 MiB 3.38 MiB 0.521 MiB 2.428 MiB 4.335 MiB 1.476 MiB 3.384 MiB 0.524 MiB 2.432 MiB 4.339 MiB 1.48 MiB 3.387 MiB

preferences:
85.54 ms | 402 KiB | 73 Q