人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでローカルのメモリに10BMのデータをキャッシュして100個のPHPプロセスからキャッシュデータを参照した場合、参照先でデータを変更しなくても1,000MBのメモリを消費するのでしょうか?
(eAcceleratorやAPC等を利用した場合を想定)

もし1,000MB消費する場合、それを回避する方法があれば教えて下さい。

●質問者: tomoyuki28jp
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:APC PHP キャッシュ データ プロセス
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● KUROX
●60ポイント

回答ははずしてるかもしれませんが・・。

■eAcceleratorの場合

http://ml.php.gr.jp/pipermail/php-users/2005-February/025139.htm...

eaccelerator_putでアプリケーション変数?に登録する

eaccelerator_getでアプリケーション変数から取り出す

---------

$val = eaccelerator_get($key)

>100個のPHPプロセスからキャッシュデータを参照した場合

おそらく、こういうコードを書いた時点で、$valという変数の領域が別個に確保されて

データがコピーされると思います。

変数を変更するには明示的にeaccelerator_putを実行しないと駄目だと思われるので

やっぱり、メモリーはプロセス分確保されるのではと思います。

---------

10MBを1つのキーで登録しないで、何分割にもして、うまくガーベージコレクションが

働くようにすれば、10MB×1000個にはならないのではないかと思います。

---------

参照渡し(アドレス渡し)になってるのなら、別途メモリーは確保しないと思いますが

そういう風にも見えないので、「参照先でデータを変更しなくても」しても関係ないと

思います。

---------

◎質問者からの返答

> おそらく、こういうコードを書いた時点で、$valという変数の領域が別個に確保されてデータがコピーされると思います。

やはりそうですよね。

参照渡しとGCの件、納得です。

参考になりました。

どうもありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ