<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ものぐさ備忘録 &#187; GC</title>
	<atom:link href="http://www.ginriki.net/wd/category/gc/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ginriki.net/wd</link>
	<description>ソフトウェア関係の話を中心とした備忘録的日記</description>
	<lastBuildDate>Sun, 11 Jul 2010 15:48:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHPはリファレンスカウントGCを使っているというお話</title>
		<link>http://www.ginriki.net/wd/2008/03/20/35/</link>
		<comments>http://www.ginriki.net/wd/2008/03/20/35/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 16:45:15 +0000</pubDate>
		<dc:creator>ginriki</dc:creator>
				<category><![CDATA[GC]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.gikogeek.net/wd/?p=35</guid>
		<description><![CDATA[
バイト先でHyper Estraierを使った全文検索機能を実装する機会がありました。
そこで、EstraierPureライブラリを使って、PHPスクリプトを通じてHyper Estraierにテキストのインデックスを [...]]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>バイト先で<a href="http://hyperestraier.sourceforge.net/index.ja.html" target="_blank">Hyper Estraier</a>を使った全文検索機能を実装する機会がありました。</p>
<p>そこで、<a href="http://page2.xrea.jp/#EstraierPure" target="_blank">EstraierPure</a>ライブラリを使って、PHPスクリプトを通じて<a href="http://hyperestraier.sourceforge.net/index.ja.html" target="_blank">Hyper Estraier</a>にテキストのインデックスを作成させるようにしたのですが、複数のテキストファイルをインデックス化する途中で下記PHPエラーが出てPHPプロセスが終了しました。</p>
<blockquote>
<p>PHP Fatal error:  Allowed memory size of 8388608 bytes exhausted (tried to allocate 22423 bytes) in /var/lib/Services/HyperEstraier/Utility.php on line 278</p>
</blockquote>
<p>なんかメモリが足りなくなっとるらしい。</p>
<p>また、インデックス化に失敗したテキストファイルから実行再開すると、そのテキストのインデックス化に成功した後、別のテキストファイルをインデックス化する時に同様のエラーが出てプロセスが終了します。</p>
<p>以上の結果からメモリリークの疑いが強いのですが、<a href="http://page2.xrea.jp/#EstraierPure" target="_blank">EstraierPure</a>は100％PHPコードなので、PHPのメモリ管理に原因がありそうです。</p>
<p>ということで、PHPのメモリ管理方法を調べてみたところ、リファレンスカウント方式のGCだと判明しました<span class="footnote"><a href="/gikogeek/#f1" name="fn1" title="PHPカンファレンス2007 「PHPの今とこれから 2007」:http://www.php.gr.jp/seminar/20070901/data/phpcon070901a.ppt">*1</a></span>。今までTracing GC系だと思ってたよ・・・</p>
<p>現在、PHPのリファレンスカウントGCは循環参照しているオブジェクトは解放できません。おそらく、<a href="http://page2.xrea.jp/#EstraierPure" target="_blank">EstraierPure</a>の中で循環参照があって、そのオブジェクトが解放されずにリークし、最終的にメモリが足りなくなるのでしょう。</p>
<p>PHP6からは、Pythonでも使われているCycle Collector<span class="footnote"><a href="/gikogeek/#f2" name="fn2" title="Cycle Collectorアルゴリズムの論文: http://www.research.ibm.com/people/d/dfb/papers/Bacon01Concurrent.pdf">*2</a></span>が実装されるそうなので<span class="footnote"><a href="/gikogeek/#f3" name="fn3" title="PHPカンファレンス2007 「PHPの今とこれから 2007」:http://www.php.gr.jp/seminar/20070901/data/phpcon070901a.ppt">*3</a></span>、今回の問題もPHP6を使えば解消します。</p>
<p>ってまだPHP6は正式リリースされてないし、今更PHP5から変えられるかーっていう状況。PHP5.3でもCycle Collectorが導入されるといいなあ。・・・結局リリース待ちなわけだけど。</p>
</div>
<div class="footnote">
<p class="footnote"><a href="/gikogeek/#fn1" name="f1">*1</a>：PHPカンファレンス2007 「PHPの今とこれから 2007」:<a href="http://www.php.gr.jp/seminar/20070901/data/phpcon070901a.ppt" target="_blank">http://www.php.gr.jp/seminar/20070901/data/phpcon070901a.ppt</a></p>
<p class="footnote"><a href="/gikogeek/#fn2" name="f2">*2</a>：Cycle Collectorアルゴリズムの論文: <a href="http://www.research.ibm.com/people/d/dfb/papers/Bacon01Concurrent.pdf" target="_blank">http://www.research.ibm.com/people/d/dfb/papers/Bacon01Concurrent.pdf</a></p>
<p class="footnote"><a href="/gikogeek/#fn3" name="f3">*3</a>：PHPカンファレンス2007 「PHPの今とこれから 2007」:<a href="http://www.php.gr.jp/seminar/20070901/data/phpcon070901a.ppt" target="_blank">http://www.php.gr.jp/seminar/20070901/data/phpcon070901a.ppt</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.ginriki.net/wd/2008/03/20/35/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
