前編でブクマコメントや日記コメントで どうしたら循環参照によるリークを回避できるのかを説明してほしい PHP 5.3 で cycle collector が搭載されることについてのフォローが欲しい という意見があったので、それも順次取り上げていくことにする。 本当はこれを後編としたかったんだけど、どんどん詰め込みたい内容が増えているので、勝手ながら一旦切って中編、後編の 2 本立てとさせてもらおう。 SpiderMonkey と XPCOM のガーベジコレクション さて、cycle collector というと Firefox 3 から搭載されるということで気になっている人も多いと思われるので、まずは SpiderMonkey (JavaScript の Mozilla での実装) ではどのような GC (ガーベジコレクション) が行われるのかを見てみたい。 基本的に、SpiderMonk
たまにはちゃんと書いたほうがいいかなと思って書いてみる。 あらまし 原始的な参照カウントベースのガーベジコレクションは、循環参照が発生すると、その参照に含まれるオブジェクトを回収できないという厄介な問題を抱えている。循環参照とは、1つ以上のオブジェクトが環状の参照関係を形成している状態のことで、このような参照を持つオブジェクトは、やがてルート (ある時点で言語ランタイムが管理しているすべてのスコープと考えてもいい) から辿りつけなくなって、解放されずにリークしてしまう。 この問題はいろんな LL 言語に見られる。 Perl の場合 use Devel::Peek qw(Dump); sub make_circular { my $foo = {}; my $bar = {}; my $baz = {}; $foo->{'bar'} = $bar; $bar->{'baz'} = $baz;
symfony+propelで数千回ループするバッチを走らせたところメモリリークしてどうしても途中で処理が終了してしまう。 調べた所、phpのガベコレのシステムで変数を循環参照させてしまうと、変数の参照カウンタが0にならずにメモリを開放してくれないのが原因だった。 propelで one-to-many のリレーションをしているテーブルを扱う場合、 $one_object->addManyObject($many_object); といったメソッドがあるのだがこのメソッドに循環参照するコードが含まれていてメモリリークしていた。数千回ループ回すバッチとかで使用する時は要注意。 public function addManyObject(ManyObject $l) { $this->collManyObjects[] = $l; $l->setOneObject($this); // ここで
About web.py web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain, you can use it for whatever purpose with absolutely no restrictions. Install web.py To install the latest web.py for Python 3, please run: The latest 0.62 release supports Python >= 3.5. Version 0.51 is the last release with Python 2.7 support. A minimal web.py application Save co
フルスタックがウリのRails。そこまで必要ないよ。と、ERBでゴリゴリ。メンドクセー。やっぱ、Railsで。などと、陽はまたのぼりくりかえしてーゆく。RubyのWebフレームワークは他にもあるけど。。軽くていいんだ。PHPを使いたくないだけなんだ。 そんな悩ましさを解消してくれるフレームワークを発見してしまいました。「Sinatra」でございます。こいつは、軽そうだ。 Sinatra サイトのトップページに書かれているコード。これが、サクサク感をかもし出してくれています。 require 'rubygems' require 'sinatra' get '/hi' do "Hello World!" end 説明読まなくても解るよ、これ。 日本語の解説スライドがあります。よく解る解説ー。 公式サイトのREADMEを読めば、だいたいOK。 Sinatra: README パラメータを取得し
This specification aims to formalize the Rack protocol. You can (and should) use Rack::Lint to enforce it. When you develop middleware, be sure to add a Lint before and after to catch all mistakes. Rack applications A Rack application is an Ruby object (not a class) that responds to call. It takes exactly one argument, the environment and returns an Array of exactly three values: The status, the h
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く