<?php
class a {
public function __construct() {
//局所変数はメソッドが終わったらメモリが解放される
$var = str_repeat("1234567890", 1024);
//メンバ変数に10KBセット
$this->var1 = str_repeat("1234567890", 1024);
//メンバ変数に10KBセット
$this->var2 = str_repeat("1234567890", 1024);
//2行目(30KB+αが増えている)
echo memory_get_usage() . "\n";
//$this->var2の値を$this->var3に参照渡し
$this->var3 =& $this->var2;
//3行目(リファレンス渡しの為メモリ使用量が少ない)
echo memory_get_usage() . "\n";
//$this->var2の値を$this->var4にコピー
$this->var4 = $this->var2;
//4行目(コピーの場合はメモリが10KB増える)
echo memory_get_usage() . "\n";
}
public function set() {
$this->var1 .= str_repeat("1234567890", 1024);
}
public function sub() {
$this->var1 = str_repeat("1234567890", 1024);
}
}
//1行目 (メモリの初期値)
echo memory_get_usage() . "\n";
//5行目 (局所変数分のメモリが解放されている)
$a = new a;
echo memory_get_usage() . "\n";
//6行目 (増やした分だけ増える)
$a->set();
echo memory_get_usage() . "\n";
//7行目(減った分だけ解放する)
$a->sub();
echo memory_get_usage() . "\n";
//8行目($this->var1のメモリが解放される)
unset($a->var1);
echo memory_get_usage() . "\n";
//9行目(var3があるためメモリは解放されない)
unset($a->var2);
echo memory_get_usage() . "\n";
//10行目(参照元がなくなった為メモリが解放される)
unset($a->var3);
echo memory_get_usage() . "\n";
出力結果:
60216
91776
91840
102144
91472
101736
91496
81240
81240
70984
PR