2005年04月22日

StackOverflowExceptionとtry-finally

   このエントリーをはてなブックマークに追加 Clip to Evernote
StackOverflowExceptionをどこまで考慮すべきなのだろう。
ItMediaの特集:スレッドの落とし穴
によれば、StackOverflowException が発生した時には、finally節は実行されないのだそうです。試しに
try {
...
} finally {
...
}

とし、tryから呼び出すメソッドで無限再帰にしてみたら、確かにfinally節を実行してくれませんでした。

ただ、
try {
...
} catch (System.StackOverflowException overFlowExcept) {
...
} finally {
...
}

とすれば、例外をキャッチし、その後finally節が実行されます。

ということは、StackOverflowException を意識した場合、try-finally は使えないことになってしまいます。
全てのコードで、try-catch-finallyを使うのは、余りにもコストが掛かるし、現実的ではありません。

DOSのころは、この例外に悩まされたこともあったけれど、最近は、stack領域も大きくなったので、この例外に、しばらく遭遇したことはありません。やはり、「finallyは必ず処理される」を前提に組むのが妥当かな?


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/19736191