アカウント名:
パスワード:
C だって「解放忘れ」なら同じ現象が起こるでしょー。
Java は free を呼ぶ替わりに使わなくなったポインタに逐一 null を入れろ、ってだけ。
C でこれと同じ状況は「解放忘れ」で簡単に起こる、というだけのことだろう。
> > Java は free を呼ぶ替わりに使わなくなったポインタに逐一 null を入れろ、ってだけ。 > これも、ガベージコレクタがオブジェクトを回収する際の「ヒント」を与えるために使われるテクニックであって、必ずしなければならない、というものではありません。 一般論ではもちろんそうだが、 メモリ不足でVMが落ちる、なんて状況では必須だろう (そうでなければGCが回収しているはずなんだから)。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
Javaの必要性 (スコア:1)
僕はいまいちJavaの良さが分かりません。
誰かJavaのすばらしさを語ってもらえないでしょうか。
Re:Javaの必要性 (スコア:1)
Java Applet のことだったり、 JavaScript のことだったりする
ことがあるので、いっかい問い詰めてみたほうがいいです。
Re:Javaの必要性 (スコア:2, 参考になる)
JITの技術がありますが本質的な解決策では無いと思います。
しかもテキスト処理なんかはJITを使ってもAwkよりもPerlよりも遅い。
次に移植性です。
Write Once Run Anywareとか言っていますがはっきり言って実現されて無いと思います。
移植性 + 速度
で考えるとCの方が上だと思っています。
GCを利点として挙げる人がいますが、それも僕はどうかと思っています。
GCがあるためにむちゃくちゃなプログラムでもある程度動いてしまいます。
1時間ぐらいだったら動くけど長時間動かしているとVMが落ちることがありますし、その時のバ
Re:Javaの必要性 (スコア:2, 参考になる)
> GCがあるためにむちゃくちゃなプログラムでもある程度動いてしまいます。
> 1時間ぐらいだったら動くけど長時間動かしているとVMが落ちることがありますし、その時のバグを見つけるのが非常に大変です。
C だって「解放忘れ」なら同じ現象が起こるでしょー。
Java は free を
# mishimaは本田透先生を熱烈に応援しています
Re:Javaの必要性 (スコア:2, 参考になる)
Cで動的に確保されたメモリブロックは、明示的に解放しない限り、(少なくとも)そのプロセスの生存中は回収されないのに対して、Javaの場合は、他から参照されなくなったオブジェクトは、ガベージコレクタによって自動的に回収されます。(そもそも、解放するという操作自体がない)
また、 これも、ガベージコレクタがオブジェクトを回収する際の「ヒント」を与えるために使われるテクニックであって、必ずしなければならない、というものではありません。(スコープを外れ、どこからも参照されていなければ、回収される)
# 「ポインタ」という用語も不適切かと。
(未確認ですが、ガベージコレクタの性能の向上で、そういったテクニックをする必要もなくなってきた、というような話もあるらしいです)
Re:Javaの必要性 (スコア:1)
> > C だって「解放忘れ」なら同じ現象が起こるでしょー。
> 少し違うと思います。
> Cで動的に確保されたメモリブロックは、明示的に解放しない限り、(少なくとも)そのプロセスの生存中は回収されないのに対して、Javaの場合は、他から参照されなくなったオブジェクトは、ガベージコレクタによって自動的に回収されます。(そもそも、解放するという操作自体がない)
?よく意味が分からん。
短時間では問題はないが、長時間動かすとVMが落ちるようなプログラム、
というのは明らかにメモリを食い潰しているのであって、
C でこれと同じ状況は「解放忘れ」で簡単に起こる、というだけのことだろう。
> > Java は free を呼ぶ替わりに使わなくなったポインタに逐一 null を入れろ、ってだけ。
> これも、ガベージコレクタがオブジェクトを回収する際の「ヒント」を与えるために使われるテクニックであって、必ずしなければならない、というものではありません。
一般論ではもちろんそうだが、
メモリ不足でVMが落ちる、なんて状況では必須だろう
(そうでなければGCが回収しているはずなんだから)。
#「ポインタ」は不適切だったな。すまん
# mishimaは本田透先生を熱烈に応援しています
Re:Javaの必要性 (スコア:1)
オブジェクト同士の意図しない循環参照などを断ち切る(その結果ガベージコレクタが回収できるようにする)ためにnullを代入すべきだということであれば同意します。
が、Cでfreeを呼ぶ代わりに、Javaではとにかくnullを代入すればよいという風に読めたので。それだと、Cのメモリ管理のやり方とJavaのやり方を混同されかねないと思いました。
結果的に同じことじゃないかといわれそうですが、解放が(プログラムの指示によって)能動的に行われるか、(VMの働きによって、プログラム側から見ると)受動的に行われるかという概念の違いは大きいのではないかと思います。