【初心者】 Java質問・相談スレ25 【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0448デフォルトの名無しさん
NGNG実行時には、スレッド毎に割り当てられるスタック領域上に、メソッド
コールに対応するフレームが作られます。
フレーム内部に、ローカル変数領域としてFileへの参照が作られます。
そこにnew file()で作成したインスタンスへの参照が代入されます。
メソッドからリターンする時には、このフレームは破棄されるので、
その瞬間Fileインスタンスへの唯一の強参照は失われ、GC対象になっ
てくれますお。
注意その1:
privateメソッドは、VMによっては最適化によって意図しないイン
ライン展開をされてしまうかもしれないので、そのへん良く考え
よう。
注意その2:
メソッドがそのように短いものなら問題ないけど、長いメソッドで
内部に長時間滞在するような場合、メソッドを抜けるまで参照が消
えないので、意図しないリークもどきを発生させることがあるよ。
参考書なんかでnullいれとけって言うのは、これを回避するための
ものだけど、よくよく考えてみれば「そんなことしなきゃいけない
ようなメソッド書くな、分割しろ」かも。
>>443
最近だとServletのコンテキストにぶら下げっぱなしという、お馬鹿
コードに散々出会うじょ。Serletで仕事してる人って、実質初心者
の人が多いから…
>>444
えーと、何か関係あるのけ?RuntimeExceptionでスレッドが意図しない
原因で死んじゃうのは、きちんとロジック組んで回避すべし?
当たり前の話だあね。
■ このスレッドは過去ログ倉庫に格納されています