PHP Memory Handling using Sleep/Wakeup feature

4 years ago

ihsanberahim

Code

function convert($size)
{
    $unit=array('b','kb','mb','gb','tb','pb');
    return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}

class ObjectOne {
  public function __sleep() {
    return collect(get_object_vars($this))->keys()->all();
  }
  
  public function __wakeup() {
    return $this;
  }
}


$object_one = new ObjectOne();

foreach(range(0, 100000) as $key => $value) {
  $object_one->{'property _'.$key} = $value;
}

dump('before', convert(memory_get_usage()));
  
$sleep_memory = serialize($object_one);
unset($object_one);

dump('slept', convert(memory_get_usage()));

$wakeup_memory = unserialize($sleep_memory);

dump('wokeup', convert(memory_get_usage()));

"done";

Output

"before"
"26.64 mb"
"slept"
"21.22 mb"
"wokeup"
"31.04 mb"
=> "done"
HELO: Local email testing for your desktop!