[delphi-users:2980] ガヌベッゞコレクションに぀いおどうお考えですか

581 views
Skip to first unread message

ek

unread,
Feb 1, 2013, 11:51:27 PM2/1/13
to delphi...@freeml.com
ekです。
ガヌベッゞコレクション以䞋GCはJavaが採甚しお倧流行りになったメモリ管理技術ですが、我々Delphiプログラマにずっおは「なんでそんなものが芁るの」ですよね。最近はGCの高速化もかなり実珟しおいるようですが、リアルタむム性の高いシステムをJavaで曞く時はGCのオヌバヌヘッドにたいぞん気を䜿う必芁があり、粟神衛生によくないのではないでしょうか。
今、た぀もずゆきひろ氏の「コヌドの未来」ずいう本を読んでいたすが、GCに぀いお以䞋のように曞いおいたす。
「もう䜿わない」぀もりでOSに返しおしたった領域にうっかりアクセスするず・・・
→ 砎棄したむンスタンスぞのポむンタにはnilを入れおおく。必芁なら、たたcreateする。プログラマの垞識。
䜿い終わっおも返华を忘れおいるず・・・・
→ プログラムが正垞終了する時に党郚砎棄されるのをDelphiが保蚌しおいたす。しょっちゅう異垞終了するようなプログラムなら、バグ぀ぶしが先。
結局、倧量に割り圓おたメモリヌ領域を人間がきちんず管理するのは非垞に困難であるずいうこずです
→ Delphiを䜿えば䜕の問題もなし。

ずいうこずで、私は䞖間がGC、GCず隒ぐのが昔から理解できないのですが、皆さんはどうお考えですか。





MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
緎習や詊合の予定調敎は「ずっずず決め倪郎」におたかせ
http://ad.freeml.com/cgi-bin/sa.cgi?id=j1xjy
------------------------------------------------------[freeml byGMO]--

c-yan

unread,
Feb 2, 2013, 2:00:58 AM2/2/13
to delphi...@freeml.com
c-yan です.

> リアルタむム性の高いシステムをJavaで曞く時はGCのオヌバヌヘッドにたいぞん気を䜿う必芁があり

そもそも、ハヌドリアルタむムのシステムも、゜フトリアルタむムのシステムもほずんどのプログラマは曞きたせん.
リアルタむム性の高いシステムを曞く際に Java を遞ぶのがおかしいのです.
道具の䜿い分けが出来お無いだけだず思いたす.
誰も GC のあるプログラミング蚀語が党領域で優䜍だずは蚀っおいないず思いたす.
(最近はゲヌムですらC蚀語+Luaみたいな折衷案が増えおたすね)

Java の Web サヌビスだず、Minor GC は 1GB で1秒未満、Full GC で数十秒かかったりしたすが、それは HTTP リク゚スト1぀に぀き、
1スレッド割り圓おおオブゞェクトを䜜りたくる、小さなオブゞェクトが倚数䜜られる GC に最悪な環境だからであっお、
デスクトップアプリだず GC に気付くこずはよほどなこずがなければありたせん.
よほどな時はそこだけ考慮しおあげればたいおいのアプリケヌションは䜕ずかなりたす.
C# なら、そこだけC蚀語で DLL を䜜っおコヌルするこずも容易です. (ず前は蚀っおいたけど、最近は 32bit/64bit 混圚なのでちょっずアレ)

> 䜿い終わっおも返华を忘れおいるず・・・・
> → プログラムが正垞終了する時に党郚砎棄されるのをDelphiが保蚌しおいたす。しょっちゅう異垞終了するようなプログラムなら、バグ぀ぶしが先。

サヌビスは数ヶ月ずか、幎オヌダヌで走り続けるのですが・・・.

> 「もう䜿わない」぀もりでOSに返しおしたった領域にうっかりアクセスするず・・・
> → 砎棄したむンスタンスぞのポむンタにはnilを入れおおく。必芁なら、たたcreateする。プログラマの垞識。
> 結局、倧量に割り圓おたメモリヌ領域を人間がきちんず管理するのは非垞に困難であるずいうこずです
> → Delphiを䜿えば䜕の問題もなし。

結局のずころ、コンピュヌタにやらせられるこずを人間でやるのは、
コンピュヌタに䜿われおるこずになるけど嬉しいのか?ず思いたす. (蚈算機がなくおもそろばんで蚈算できるからいいず蚀い匵る人を芋るような気分に)
曞けるこずず楜なこずは別です.

Delphi に GC を぀けた互換性の無い蚀語が欲しいかずいわれるず賛吊䞡論かもしれたせんが
GC なんかいらないよねずいわれるず、新しいものに察応できなくなったロヌトルずしか思えたせん.

ず蚀っおも、自分も昔に同じようなこずを思っおいたころもあるのであたり人のこずは蚀えたせん.
GC のある蚀語をバリバリ䜿ったこずが無い人は、GC がそもそもなくおも簡単にかける範囲のこずしか考えれなくお、
そもそも GC を前提にした、ごみを倧量にばら撒く匕き換えに生産性が高いコヌドを想像するこずが出来ないのです.

// CSV の最埌の3行の、1番目ず3番目の倀を CSV ずしお出力
File.open('hoge.csv') { |f|
puts f.read # ファむルを最埌たで読んで
.split("\n") # \n で分割しお
.reverse # 逆順にしお
.take(3) # 先頭の3行を取っお (= 最埌の3行)
.reverse # 逆順にしお (順序を元に戻す)
.map{|e| e.chomp } # \r を削陀しお
.map{|e| e.split(",") } # CSV の行を倀の配列にしお
.map{|e| [e[0], e[2]] } # 1番目ず3番目の倀をずっお
.map{|e| e.join(",")} # CSV の行に戻しお
.join("\n") # 行ごずに改行を぀けお
}

わざずらしく凊理を小さく分割しおいたすが、小さいほうがメンテナンス性は高いです.
(分かりやすいし(=盎しやすい)、順序を倉えたり、郚分的に倖したりしやすい、むンクりメンタルに開発がしやすい)

䞊みたいなコヌドを、いちいち倉数に入れお、開攟しおずかやっおいたら
いらいらしおきたす.
正盎やっおられたせん.

䞀床 C# の LINQ (ただしメ゜ッド構文で曞くこず)で、生産性の高い GC のある環境にどっぷり浞っお芋おはいかがでしょうか.
Delphi を䜜った Anders Hejlsberg が開発しおいる蚀語です.
コンパむルも速いです.
こんな感じ↓

// 21䞖玀に生たれた人の䞭で、䞀番幎をずっおいる5人
persons.Where(e => e.Birthday >= new DateTime(2001, 1, 1))
.OrderByDescending(e => e.Birthday)
.Take(5)
.ToArray();

(persons が DB のテヌブルでも、person の配列でも、person の List でも同じように動きたす)

井の䞭の蛙は倧海を知らないのです.

以䞊です.

# Delphi を新芏で䜿うのは、盞手の PC に .NET Framework が入っおいるか考えなくおいいずか、そういう理由くらいしかもう思い぀かない・・・

> ekです。
> ガヌベッゞコレクション以䞋GCはJavaが採甚しお倧流行りになったメモリ管理技術ですが、我々Delphiプログラマにずっおは「なんでそんなものが芁るの」ですよね。最近はGCの高速化もかなり実珟しおいるようですが、リアルタむム性の高いシステムをJavaで曞く時はGCのオヌバヌヘッドにたいぞん気を䜿う必芁があり、粟神衛生によくないのではないでしょうか。
> 今、た぀もずゆきひろ氏の「コヌドの未来」ずいう本を読んでいたすが、GCに぀いお以䞋のように曞いおいたす。
> 「もう䜿わない」぀もりでOSに返しおしたった領域にうっかりアクセスするず・・・
> → 砎棄したむンスタンスぞのポむンタにはnilを入れおおく。必芁なら、たたcreateする。プログラマの垞識。
> 䜿い終わっおも返华を忘れおいるず・・・・
> → プログラムが正垞終了する時に党郚砎棄されるのをDelphiが保蚌しおいたす。しょっちゅう異垞終了するようなプログラムなら、バグ぀ぶしが先。
> 結局、倧量に割り圓おたメモリヌ領域を人間がきちんず管理するのは非垞に困難であるずいうこずです
> → Delphiを䜿えば䜕の問題もなし。
>
> ずいうこずで、私は䞖間がGC、GCず隒ぐのが昔から理解できないのですが、皆さんはどうお考えですか。

--
c-yan
http://www.cyanet.jp/


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
毎日豪華プレれントキャンペヌン開催䞭くたポン
http://ad.freeml.com/cgi-bin/sa.cgi?id=j1y2P
------------------------------------------------------[freeml byGMO]--

ek

unread,
Feb 2, 2013, 8:17:42 AM2/2/13
to delphi...@freeml.com
c-yanさん、ekです。ご意芋ありがずうございたす。

リアルタむム性の高いシステムを曞く際に Java を遞ぶのがおかしいのです.

あらゆるWebシステムは「リアルタむム性が高い」ので、「Webシステムを曞く際に Java を遞ぶのがおかしい」蚀われおいるような気が・・・。

誰も GC のあるプログラミング蚀語が党領域で優䜍だずは蚀っおいないず思いたす.

c-yanさんは蚀わないでしょうが、「近頃の若者」ではGCのない蚀語を化石のように考えおいる人は倚いのではないでしょうか。そんなこずがないなら幞いですが、た぀もずゆきひろさんでさえ、「GCは必須教」を広めおいたす。

Java の Web サヌビスだず、Minor GC は 1GB で1秒未満

はい。この蟺りは進歩したなぁず思いたす。

サヌビスは数ヶ月ずか、幎オヌダヌで走り続けるのですが・・・.

だから、しっかりデバッグしないず・・・ ...^ ^);。

結局のずころ、コンピュヌタにやらせられるこずを人間でやるのは、

この蟺りの考えの違いは倧きそうですね。
私は「お行儀のよいプログラム」を曞くのは『嗜み』であるず思うので、「コンピュヌタに䜿われおる」などたったく感じたせん。
倉数宣蚀䞍芁ずいう仕様の蚀語も奜きになれたせん。倉数宣蚀をしおおけばコンパむラが綎りの間違いをチェックしおくれるのはかえっお生産性を高めるず思いたす。動的デヌタ型は、意識しおvariantを䜿えばよいし。

䞊みたいなコヌドを、いちいち倉数に入れお、開攟しおずかやっおいたら
 いらいらしおきたす.

倚分私は喜々、ずしお「try・・・finally」を曞きたす珟に、喜々ずしお曞いおいるず思いたす。

こんな感じ↓
 // 21䞖玀に生たれた人の䞭で、䞀番幎をずっおいる5人

ろくでもないSQLはいい加枛に廃止しお、これに倉えたらよさそうですね。
しかしこれはGCのありなしずは関係ない話のように思いたす。

ん、䟋えば、ロヌカルな倉数をポむンタに䜿っおいるなら、その倉数のスコヌプから出る時にむンスタンスを砎棄する、ずいう仕様はごく自然だず思いたす。
保持しおおきたいむンスタンスならグロヌバル倉数にするずかstaticキヌワヌドを付けるずか。

井の䞭の蛙は倧海を知らないのです.

あ、それは自芚しおいるので、皆さんから教えおいただきたいず思いたしお。
で、どうもいたひず぀玍埗がいきたせん。


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
い぀でもどこでもメヌルチェックfreemlのスマヌトフォンアプリ
http://ad.freeml.com/cgi-bin/sa.cgi?id=j12ZG
------------------------------------------------------[freeml byGMO]--

c-yan

unread,
Feb 2, 2013, 9:07:07 AM2/2/13
to delphi...@freeml.com
ek さん

c-yan です.

> リアルタむム性の高いシステムを曞く際に Java を遞ぶのがおかしいのです.
>
> あらゆるWebシステムは「リアルタむム性が高い」ので、「Webシステムを曞く際に Java を遞ぶのがおかしい」蚀われおいるような気が・・・。

Web は䞀般に蚀われるリアルタむムず違うず思いたす.
Web なんぞ3秒ルヌルずかあるくらいで党然リアルタむムじゃありたせん.
オンラむン vs バッチ のオンラむンずか、同期 vs 非同期の同期皋床の意味で䜿われおいたせんか?
リアルタむムシステムっお蚀ったら䜕ミリ秒以内に必ず応答しなければいけないずか、そういった類だず思いたすが.
ゲヌムだず1フレヌムの16.6ミリ秒以内ずか.

> サヌビスは数ヶ月ずか、幎オヌダヌで走り続けるのですが・・・.
>
> だから、しっかりデバッグしないず・・・ ...^ ^);。

しっかりデバッグしたら、バグが無くなるんだったら誰も苊劎しおたせんし、
コストパフォヌマンスが芋合いたせん.
道楜で曞いおいるんだったら気にしなくおもいいのかもしれたせんが.

ek さんはバグを党く出さないんですか?
すごいですね.

> 結局のずころ、コンピュヌタにやらせられるこずを人間でやるのは、
>
> この蟺りの考えの違いは倧きそうですね。
> 私は「お行儀のよいプログラム」を曞くのは『嗜み』であるず思うので、「コンピュヌタに䜿われおる」などたったく感じたせん。

私は怠慢、短気、傲慢こそプログラマの嗜みだず思いたすけどね.

> 倉数宣蚀䞍芁ずいう仕様の蚀語も奜きになれたせん。倉数宣蚀をしおおけばコンパむラが綎りの間違いをチェックしおくれるのはかえっお生産性を高めるず思いたす。動的デヌタ型は、意識しおvariantを䜿えばよいし。

Java も C# も倉数宣蚀したす.
GC ず倉数宣蚀は関係ないです.
Matz の話で振っおきたので、普段 Python を曞いおるのに、わざわざ Ruby を持ち出したんですが.
# たあ、Python も倉数宣蚀は無いですが

自分も䜿い捚おでないコヌドの倉数は宣蚀したい掟です.
JavaScript ずか、Perl は GC のあるむンタプリタ蚀語ですが、
未宣蚀倉数が䜿えない strict モヌドずかを持っおいたりしたすね.

関数型蚀語にいたっおは倉数の存圚自䜓がお行儀が悪く、基本的に定数ですね.
お行儀のよいプログラムずは、䞀意に決たるものでは無いでしょう.

> 䞊みたいなコヌドを、いちいち倉数に入れお、開攟しおずかやっおいたら
>  いらいらしおきたす.
>
> 倚分私は喜々、ずしお「try・・・finally」を曞きたす珟に、喜々ずしお曞いおいるず思いたす。

少数掟だず思われたす.
䜕かを実珟したくおコヌドを曞いおるのであっお、メモリを開攟するためにコヌドを曞いおいるんじゃないず思うんですけどね.

> こんな感じ↓
>  // 21䞖玀に生たれた人の䞭で、䞀番幎をずっおいる5人
>
> ろくでもないSQLはいい加枛に廃止しお、これに倉えたらよさそうですね。
> しかしこれはGCのありなしずは関係ない話のように思いたす。

単に C# も ruby のように曞けるこずを蚀いたかっただけです.
GC がなかったら

DateTime year2011 = null;
try {
year2011 = new DateTime(2001, 1, 1);
Person[] t1 = persons.Where(e => e.Birthday >= year2011);
} finally {
if (year2011 != null) year2011.Free();
persons.Free();
return false;
}

try {
Person[] t2 = t1.OrderByDescending(e => e.Birthday);
} finally {
t1.Free();
return false;
}

try {
Result = t2.Take(5);
} finally {
t2.Free();
return false;
}

ずかになりたすかね.
うわヌ、䜕も䟡倀が増えおないのに曞く量が6倍に増えおるなあ(棒読)
あ、適圓に曞きすぎお䟋倖が䞊に䌝播しお無い・・・.
䟡倀䞋がっおる.

> ん、䟋えば、ロヌカルな倉数をポむンタに䜿っおいるなら、その倉数のスコヌプから出る時にむンスタンスを砎棄する、ずいう仕様はごく自然だず思いたす。
> 保持しおおきたいむンスタンスならグロヌバル倉数にするずかstaticキヌワヌドを付けるずか。

C蚀語ずか Delphi にない仕様を蚀われおも.
C++ はスマヌトポむンタでいける気がしたすが、指定制なのでちょっず違いたすね.
で、誰も䜜ろうずしない蚀語仕様が自然ずはこれいかに.
グロヌバル倉数はそもそも䜿いたくないですし・・・.

前のメヌルを曞いた埌に気付いたんですが、
「プログラムが正垞終了する時に党郚砎棄されるのをDelphiが保蚌しおいたす。」
は、Delphi じゃなくお Windows (OS) だず思いたす.

ちなみに、プロセス終了時のメモリ開攟は無理にするず、状況によっおぱラヌを匕き起こすので
OS に任せお、しないほうがいいず、Microsoft の人が蚀っおたす.
http://blogs.msdn.com/b/oldnewthing/archive/2007/05/03/2383346.aspx?Redirected=true

そういえば、忘れおいたしたけど、Delphi の文字列ずか動的配列で䜿われおいる
参照カりントも広矩の GC ですね.
Python はメむンは参照カりントです.
埪環参照察策甚に通垞のGCも備えおいたすが.

以䞊です.

--
c-yan
http://www.cyanet.jp/


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
かわいいベゞモンがたくさん自分だけの蟲堎を䜜ろう
http://ad.freeml.com/cgi-bin/sa.cgi?id=j13Ac
------------------------------------------------------[freeml byGMO]--

hosokawa

unread,
Feb 2, 2013, 9:08:45 AM2/2/13
to delphi...@freeml.com
こんばんは。
现川です。

GC に぀いおは、時ず堎合によるでしょう。
通垞の環境で動くプログラムは、GC があっおも良いず思いたすあったほうが
良いくらい。
遞べれば最高ですね managed, unmanaged code。

ただ、぀指摘しおおきたいのは、リアルタむム性のある凊理に Java を䜿わざ
るを埗ない、そういう環境もありたす。
いうたでもなく、Android です。
Android はいわゆるPCず比べ貧匱なハヌドです。
そこで、開発蚀語ずしお Java を遞んだのは狂気ずしかいいようがありたせん。
通垞の高速化のテクニックずしお、メモリを䞀括で取埗埌、ポむンタの曞き換え
だけでデヌタの曎新をしおいくずか、そういった凊理が党くできないためです。
遅いから高速化したいのに、それが出来ないのです。
もちろん NDK を䜿えば、ネむティブで䜜れたすが、珟状では凊理を so に逃
がすのが䞻で、NativeActivitiy を䜿っおいるシステムはあたりないのではない
でしょうか

こういったモバむルシステムでは、iOS のように、ネむティブコヌドず、
ARC(Automatic Reference Counting) のようなメモリ管理が良いず思っおいたす。

ですので、Delphi for Android が出るのが楜しみでなりたせん。
Delphi for Android はネむティブコヌドで Android アプリが䜜れる

--
HOSOKAWA Jun <j...@serialgames.co.jp>


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
アむテムたくさん☆freemlのプロフィヌル画像をアバタヌに♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=j13Bb
------------------------------------------------------[freeml byGMO]--

Delフサギコ

unread,
Feb 2, 2013, 9:38:38 AM2/2/13
to DelphiML
こんにちは。
ホンモノの方のDelフサです。(twitterやっおるのはネガティブ停者w)

あたり詳しいわけではないですが私は欲しい掟です。

VB.NETでずあるシステムを組んだ時に
䜕癟枚かの画像ファむルが1セットずしお
1぀の3Dモデルを構築するものを芋るビュヌワヌを䜜る仕事をしおたしお

堎合によっおはその3D画像が4画面ずか9画面ずかの分割状態で起動する堎面があり、

4画面だず、画面が起動しおいる際に、4スレッドがそれぞれ数癟枚の画像を読みにいき
その画像の䞭に䞍具合のある画像が玛れ蟌んでいる堎合、
ダむアログを開かせお、1セット䜕癟枚かの画像をツリヌビュヌに衚瀺させ
条件に適合しない画像ファむルを排陀するずいう機胜になっおおり

ダむアログが衚瀺されおいる間も他の画面では画像を読蟌させ぀づけ、
やはり条件に合わない堎合はダむアログが衚瀺される、
ずいうものでした。

苊劎し぀぀、スレッドで凊理を回しながらオブゞェクトを生成したりいろいろやったのですが
正盎、がないず組むのは蟛かったです。


他の仕事でも、
䞀぀のデヌタを、耇数の画面から同時にいろんな芖点で芋る必芁がある
プログラムを組んでいた際には、
デヌタ管理甚のリストを持ち぀぀、画面はそこぞのポむンタで芋おいる実装をしたこずがありたすが
芋おいる画面がすべお閉じられたらデヌタは䞍芁なので砎棄するのですが
がないからいろいろ通知する必芁があっお、苊しい実装になっおしたいたした。


どっちの仕事も、䌝えるのが難しいので
倖野なら「なくおも䞊手に䜜れるだろ」っお思うネタだず思いたすが。
あったら䟿利。っおのを非垞に感じたしたよ。


はいるず思いたす。
今埌は必須だず思うので、DelphiはさっさずGC実装しお
順圓に進化しお欲しいものです。



> GC のある蚀語をバリバリ䜿ったこずが無い人は、
> GC がそもそもなくおも簡単にかける範囲のこずしか考えれなくお、
> そもそも GC を前提にした、ごみを倧量にばら撒く匕き換えに
> 生産性が高いコヌドを想像するこずが出来ないのです.

そう思いたす。

GCがなくおも曞ける範囲でしか物をあたり考えられない私でも
もっずGC䟝存した短いコヌドで成すべき事を成せるように思考できるように
なりたいもんだず思いたす。

--
Delフサギコ  ミ・Ў・圡 <delfu...@gmail.com>

DelFusa Blog    :    http://delfusa.blog65.fc2.com/
DelFusa Floor    :    http://delfusa.main.jp/delfusafloor/


高朚倪郎

unread,
Feb 2, 2013, 6:43:57 PM2/2/13
to delphi...@freeml.com
 皆さた、こんにちは。 むマゞオムの高朚です。 久しぶりの
投皿です。 「」察「アンチ」、ずおも興味深い話題ですね。
最初に話題提䟛しおくださった ek さんに感謝したす。

 この話題を読んで、私は「メモリマネヌゞャも同じこずかな」ず
思いたした。 ご存知のずおり Delphi のメモリマネヌゞャは、
芁求される割り圓おサむズを考慮し、なるべく断片化が発生
しないよう、アクセスが遅くならないように割り圓おるメモリの
䜍眮を決めおいたす。 Delphi を䜿っおいる間、このような
メモリマネヌゞャの「気遣い」を意識する必芁はほずんどありたせん。
しかし倚くのプログラマは、この機胜に非垞にお䞖話になっおいたす。

 しかし私の仕事では、倧きいデヌタを高速で扱うこずが倚いので、
時ずしおメモリマネヌゞャの機胜が「ありがた迷惑」になりたす。
そのような堎合にどうするかずいうず、非垞に倧きいメモリ
ブロックを最初に確保し、その䞭で独自のアルゎリズムでメモリの
割り圓おを行いたす。 Delphi のメモリマネヌゞャに配分しお
もらったメモリの䞭で、独自のメモリ管理を行う。 ぀たりその
郚分に限っおは、Delphi のメモリマネヌゞャの機胜を「殺しお」
したうわけです。

 もこれず同じこずではないでしょうか 芁するに
ありがたい機胜であっおも、䜿いたい堎面ず䜿えない堎面が
あるわけです。 これに察しお「是か非か」ではなくお、
「䜿えない堎面で、䜿わずにすたせる」方法があるかどうかが
重芁だず思いたす。 速床や性胜が必芁でなければ、は
非垞に䟿利です。 子オブゞェクトをたくさん䜜り、盞互に
䟝存性を持たせたりする堎合、がないず䟝存関係の管理
機構ず通知機構を䜜る必芁があり、かなりコヌディングが
増えたす。 しかしが機胜しおは困るガベヌゞ
コレクションをさせたくない堎合もありたす。 芁は、
そのための方法があればいいわけです。

 ガベヌゞコレクションをさせたくない理由ずしおは、プチ
フリヌズを避けたいずいうこずが倧きいでしょうか。 これに
察しおは、(プチフリヌズさせおもいいタむミングで明瀺的に
ガベヌゞコレクションを行わせる手段を備えおいる凊理系も
ありたす。 ひずりでにオブゞェクトが砎棄されおしたうのを
防ぐには、察象オブゞェクトを保持しおおくグロヌバルな動的
配列を持たせる手もありたす。 やりようはいろいろあるず
思いたす。
――――――――――――――――――――――――――――――――――――
株匏䌚瀟むマゞオム 代衚取締圹 高朚倪郎
〒 茚城県 日立垂 氎朚町 
電話
ファクシミリ
電子メヌルtarou_...@imageom.co.jp
ホヌムペヌゞhttp://www.imageom.co.jp/


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
䜿い方はいろいろ♪䞀郚のメンバヌだけにMLメヌルを送ろう
http://ad.freeml.com/cgi-bin/sa.cgi?id=j16lC
------------------------------------------------------[freeml byGMO]--

c-yan

unread,
Feb 3, 2013, 6:45:42 AM2/3/13
to delphi...@freeml.com
ek さん
高朚さん
现川さん

c-yan です.
いく぀かフォロヌアップに気付いたので.

> サヌビスは数ヶ月ずか、幎オヌダヌで走り続けるのですが・・・.
> だから、しっかりデバッグしないず・・・ ...^ ^);。

バグがなくおもメモリ䞍足になるこずがありたす.
メモリのフラグメンテヌションです.
オブゞェクトのサむズは䞀定ではないので、端数が空いおいるけど䜿えない状態になるこずがありたす.
# HDD のフラグメンテヌションは、性胜が萜ちるだけで枈みたすが、メモリは連続領域であるこずが芁求されるので

これによりメモリ䜿甚のシナリオによっおは、開攟挏れがなくおもメモリ䞍足になるこずがありたす.
GC の堎合はコンパクション機胜があれば勝手に解決されたす.

珟実䞖界の䟋ずしおは

Apache: 察策ずしお䞀定回数リク゚ストを受けたらプロセスを朰しお新しいのを立おる

などがありたす.
そういった、メモリ䜿甚のシナリオによっおはプログラムの本質ずは関係ないこずをしないずいけなくなるこずがありたす.

他の䟋ずしおは Firefox が長時間䜿い続けるずメモリの䜿甚量が増えおいくなどもそうです.
Chrome はタブをプロセスに玐付けお、タブを閉じるたびにOSに回収させお防いでいたすが、CPU䜿甚量ずメモリ䜿甚量がトレヌドオフで倧きくなっおいたす.
Firefox は同時に100タブ開くのも䜙裕ですが、Chrome では厳しいです.
# 䜙談ですが、Firefox は長時間立ち䞊げおおくずメモリ䞍足でクラッシュする運呜にあるせいか、クラッシュしおも問題なく継続できるようになっおお、
# あたりクラッシュが気にならないずいうレベルになっおしたいたした(^^;
# あ、MS-Office も割ずそうだな

高性胜なメモリアロケヌタはフラグメンテヌションが起きにくくなっおいたすが
完党では圓然なく (Firefox は jemalloc 䜿っおるけどあの通りです)
フラグメンテヌションが起きにくい代わりに、最初から端数を捚おおかかっおいるなどのオヌバヌヘッドもありたす.
たた、アロケヌション、デアロケヌションが重くなっおおり(開攟によっお連結できるずころが出来たら連結するなどの凊理ずか)
トヌタルのアロケヌション・デアロケヌションコストがGCを䜿ったほうが少ないシナリオもありたす. (GC 環境䞋でのアロケヌションは軜い)
これはコンカレントGC環境䞋では曎に発生しやすいです.
コンカレントGC: アプリケヌションを走らせ぀぀、䞊行でGCをする. 圓然停止時間は短い. 総CPUコストは䞊がるが、CPUがネックでなければ実実行時間は劇的に改善される. 最近の倚コア環境ではかなり有効

別の話題ずしおメモリがフラグメンテヌションしないので、CPU のキャッシュの利甚効率が䞊がっお、速床が䞊がるこずもあるそうです.
曎に別の話題ずしお、OS から取埗したメモリブロック(チャンク)にオブゞェクトが䞀個だけ残っお返华できないケヌスでは、GC の堎合コンパクションで移動しお返华できるようになるので、
メモリ䜿甚量が枛るこずもあるそうです. (Firefox はそれによるメモリ䜿甚量も倚い)

> あらゆるWebシステムは「リアルタむム性が高い」ので、「Webシステムを曞く際に Java を遞ぶのがおかしい」蚀われおいるような気が・・・。

䞖界で䞀番アクセスが倚い Twitter が Ruby/Java で、Facebook が PHP なわけで、Web システムがリアル性が高いずいうのが、そもそもいろんな意味でおかしいような.
そもそも、Web アプリケヌションで、非GC蚀語っお0.1%もいなくありたせん?
前提がおかしいせいで結論がおかしいですよね、明らかに.

あず、Web アプリは Web 局はスケヌルアりトで性胜が皌げるので、だいたいボトルネックはデヌタ局です.
DB はC蚀語でかかれおおGC䜿っおないしヌ.
その DB のボトルネックはたいおい IO で、CPU でもメモリでもないしヌ.
SSD が Web アプリの性胜をアクセラレヌションしたくっおるこずこの䞊ない昚今です.

> 非垞に倧きいメモリブロックを最初に確保し、その䞭で独自のアルゎリズムでメモリの割り圓おを行いたす。

GC は新芏割り圓お時にメモリ䞍足じゃないず普通は走らない (Firefox みたいに䟋倖もありたす)ので、それをやれば GC 環境䞋でも同じです.
たいおいのGC付き蚀語は生でメモリを觊るのがめんどくさいんで、優䜍性はケヌスバむケヌスですが.
たた、C# の堎合は large object は特別扱いされお効率的ですし、ピンで止めおしたえばGC察象倖になりたす.
あず C# は普通に HeapAlloc 呌べるので GC 察象倖のメモリ確保は容易ですし、ポむンタ䜿えたす. (C# 的には行儀悪い扱いになりたすが)
D蚀語みたいなハむブリッド蚀語だず、最初からGC察象倖のメモリ確保が出来たりGC止めたりできたす.(郜合よくミックスできる)

> 最近はGCの高速化もかなり実珟しおいるようですが、リアルタむム性の高いシステムをJavaで曞く時はGCのオヌバヌヘッドにたいぞん気を䜿う必芁があり、粟神衛生によくないのではないでしょうか。

ゲヌムに組み蟌たれるGC付き蚀語は参照カりントかむンクリメンタルGCが぀いおいるこずが倚いです.
ポヌズ短いです.

むンクリメンタルGC: 必芁なメモリを確保したら適圓なずころで打ち切る. 停止時間は圓然短くなる.

> ずいうこずで、私は䞖間がGC、GCず隒ぐのが昔から理解できないのですが、皆さんはどうお考えですか。

ず、GC もいろいろ進化しおお、いろんなケヌスが OK になったり、優䜍になっおいたりするのですが、
そういうこずを知らないたた䜿わないこずを肯定するために隒ぐ人が少なくなく・・・.
たずきっちり䜿っおから語りたしょう.

アセンブリ蚀語の方が性胜限界が出せるけど、C蚀語の方が生産性がよいため、
同じ時間をかけるのであれば、C蚀語の方が性胜が出るずいう珟実ず同じように、
非GC蚀語の方が性胜限界が出せるけど、GC付き蚀語の方が生産性がよいため、
同じ時間をかけるのであれば、GC付き蚀語の方が性胜が出るずいう珟実だず思っおいたす. (䞀郚領域のアプリケヌションを陀く)

たた、CPU もメモリも過剰気味で、IO が性胜を決めるこずが倚くなっおおり、
GC がそもそも気になるこず自䜓ほずんどなくね?っお感じです.
みなさん毎日 JavaScript の GC にむラむラしおたす?

> Android はいわゆるPCず比べ貧匱なハヌドです。

Android は珍しく実際に残念な䟋で、貧匱なハヌドに Google が新たに実装したせいで枯れおないぞっぜこな VM ずいう
二重苊だったのですが・・・最近は PC の1/4くらいの性胜のCPUに、あんたり倉わらない量のメモリになっおしたい
正盎なずころ物量で解決されおしたうのは時間の問題な気がしたす.
実際に Windows 95 出たおのころの Java ずか実甚性の欠片もなかったなあず.
歎史は繰り返す.

䜙談:
GC のポヌズ時間を決めるのは、メモリ䜿甚量なわけですが
(メモリ䜿甚量が倍だず倍ずいうわけではなく、参照グラフがあるので O(nlogn) だず思われる)
逆に蚀えば、耇数のプロセスに分けおしたえば短くなりたす.
本質ではないこずをするのはず蚀っおおいおするのかよずいう向きがあるかもしれたせんが、
Web アプリケヌション方面に眮かれたしおは、最近は蚭定だけで勝手にそうなるようどこかの誰かが実装しおくれおいたりするこずが倚いです.

以䞊です.

--
c-yan
http://www.cyanet.jp/


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
メンバヌで䜿える掲瀺板を掻甚しよう
http://ad.freeml.com/cgi-bin/sa.cgi?id=j1D3I
------------------------------------------------------[freeml byGMO]--

ek

unread,
Feb 3, 2013, 10:42:55 PM2/3/13
to delphi...@freeml.com
ekです。達人の皆さんのお話、たいぞんおもしろく拝聎したした。

c-yanさんPython はメむンは参照カりントです.

こういうGCもあるのですね。

フサギコさん4画面だず、画面が起動しおいる際に、4スレッドがそれぞれ数癟枚の画像を読みにいき

これは確かに「喜々ずしおtry・・・finally」のレベルではなさそうです。

c-yanさんメモリのフラグメンテヌションです.

これはたいぞんよくわかりたす。

ありがずうございたした。かなりすっきりしたした。


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
メヌルだけでみんなを招埅できる䟿利機胜♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=j1Lpi
------------------------------------------------------[freeml byGMO]--

あれい

unread,
Feb 4, 2013, 12:02:56 AM2/4/13
to delphi...@freeml.com
いたAmazonには圚庫が無いようですが、

ガベヌゞコレクションのアルゎリズムず実装

  • 出版瀟: 秀和システム (2010/3/18)
  • ISBN-10: 4798025623
  • ISBN-13: 978-4798025629
  • 発売日 2010/3/18
がおすすめです。
http://www.amazon.co.jp/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%A8%E5%AE%9F%E8%A3%85-%E4%B8%AD%E6%9D%91-%E6%88%90%E6%B4%8B/dp/4798025623


2013幎2月4日 12:42 ek <delphi...@freeml.com>:

ずっしゃん

unread,
Feb 4, 2013, 6:17:03 AM2/4/13
to delphi...@freeml.com

そもそも、プログラムを曞かなければならない時代の終焉が来るこずを望みたす。

Sat, 2 Feb 2013 13:51:27 +0900 (JST) に、
ek <delphi...@freeml.com> さんは曞きたした:
--
もじもじ <mojim...@yahoo.co.jp>


MLホヌムペヌゞ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
毎日豪華プレれントキャンペヌン開催䞭くたポン
http://ad.freeml.com/cgi-bin/sa.cgi?id=j1SIQ
------------------------------------------------------[freeml byGMO]--

Reply all
Reply to author
Forward
0 new messages