参照カウント
Perl にも weak reference があることを知った。これを使ってゴミサイクルを作らないようにするのは、なんだかとても難しそうな気がする。
$ cat test.pl use Scalar::Util qw(weaken); for (my $i = 0; $i < 200000; $i++) { my @x; push @x, \@x; weaken $x[0] if $ARGV[0]; } print `ps -co rss,command | grep perl`; # メモリ使用量 $ perl test.pl 19312 perl $ perl test.pl weak 988 perl
なお、referent が消滅すると undef になる。
$ cat test.pl use Scalar::Util qw(weaken); my $x; { my $y = "Hello!"; $x = \$y; weaken $x; print defined($x), " => $$x\n"; } print defined($x), " => $$x\n"; $ perl test.pl 1 => Hello! =>