- - PR -
ガベージコレクションの対象となるタイミングについて
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-17 12:36
午前中試験を受けてきました。かろうじて合格でした。
しかし、ここのスレッドの問題2と同じ問いがでて結局わけのわからぬまま とりあえず、b[0] = nullに相当する部分の直後と解答しました。 うーん、これって正解なんでしょうか・・・。とりあえず、 問題2を作成した会社への問合せ結果を待ってみます。 (尚、試験問題では String型のオブジェクトではなくて Float型のオブジェクトへの参照となっておりました。) | ||||||||
|
投稿日時: 2003-11-17 13:09
この正解はあっています。(と思います。ちがっていたらすいません。)変数が自分のプログラムのどこに配置されるのか、同じ値が入っていても、変数を参照しに行く形になるので、同じオブジェクトとはいいがたいところがあります。ひとつひとつのオブジェクトをメモリのどこに配置されていて、その配置を見に行っているのかいないのかを追っていけば、おのずとたどり着くのではと思います。ガーベッジのことと、変数のことが入り乱れていると思います。JAVAではこのガーベッジコレクションでどうのこうのといった不具合はあまりありえないと思われ、Cや、実際にメモリを制御するようなプログラムを書くときに時々気をつけなければならない部分なので、私も試験を昔受けたときに、こんな問題がでていて、JAVAでも必要あるのかな?なんて、思ったことがありました。まぁ、試験に受かればOKですね。おめでとうございます。
| ||||||||
|
投稿日時: 2003-11-17 13:27
こんにちは、R-55です。
begoodさんの説明が少し理解できなかったので僕も絶対の自信があるわけではないのですが、 実際に a = null; の後も b[0]のオブジェクトは"ABC"のままなんですよね。 このオブジェクトを後で使用する必要があったとしてGCで回収されちゃったらこまると思うんですが。 なにか勘違いしてますでしょうか。 | ||||||||
|
投稿日時: 2003-11-17 13:54
私も認定試験合格者ですが……ここまで変な問題出題されましたっけ?
#いや、もう忘れかけてはいるんですが。 ますます資格の価値がなくなってしまうような、いいかげんな問題ですね。とほほ。 | ||||||||
|
投稿日時: 2003-11-17 14:26
まずは、合格おめでとうございます。その調子でこれからも精進してください。
偉そうに書いてますが私もまだまだ勉強することだらけです。
件のサイトで問題と解説を見てきました。 それによると「bは間接参照しているだけだからaの値が変わるとbの参照先も変わる」とあります。 が実際には間接参照になっていないのではないか、というのが「腑に落ちない」点です。 b[0] = a; の解釈が、彼らによると b[0] --(参照)-> a --(参照)-> "ABC" ということになるらしいのですが、私(ほか腑に落ちない皆さん)は b[0] --(参照)-> "ABC" となると思っています。皆さんの環境では以下のコードの出力結果はどうなりますか。
| ||||||||
|
投稿日時: 2003-11-17 16:27
合格おめでとうございます。
JDK1.1.8(win2000Pro)では、以下の結果でした。 b[0] = ABC b[0] = ABC b[0] = GHI 私も「"ABC"自体はガーベッジされない」に一票なのですが……、 勘違いしてたらすみません。 | ||||||||
|
投稿日時: 2003-11-17 16:31
swatです。 私も腑に落ちない一人です。 Javaって、インスタンスへの参照を参照で渡すことってないはずです。 「参照の値渡し」だと思っていたのですが。 _________________ ****** swat ****** http://www.h7.dion.ne.jp/~s_wat/ http://d.hatena.ne.jp/swat/ | ||||||||
|
投稿日時: 2003-11-17 17:50
私も腑に落ちません。 というか明らかに間違ってますよね? 忍者鳥取県氏のデバッガでのチェックでも明らかですし、 以下のようなプログラムでも、およそチェックできます。
# System.gc()の信頼性とか、finalizeが呼ばれたこととGC対象になったことは # 同値ではないとか突込みどころはありますが... | ||||||||
