例外はどこに格納されていますか? スタック、ヒープ。 例外のメモリ割り当てと割り当て解除はどのように行われますか? 処理する必要がある複数の例外がある場合、これらの例外のオブジェクトがすべて作成されていますか?Java例外とC++例外
答えて
例外のメモリは、(ヒープ上の)他のすべてのオブジェクトと同じ方法で割り当てられると仮定します。
これは問題でした。なぜなら、OutOfMemoryErrorにメモリを割り当てることができないからです。 は、no stack trace until Java 1.6だったのです。今では、スタックトレース用のスペースもあらかじめ割り当てています。
例外の参照がスローされている間に格納されているのではないかと疑問に思っている場合、JVMは参照を内部的に保持している間にコールスタックを解放して例外ハンドラを見つけ、スタックフレーム、他のローカル変数と同様)。
同時に(同じスレッド上で)2つの例外をスローすることはできません。ネストすることはできますが、ネストされた例外を参照する「アクティブ」例外は1つしかありません。
例外への参照がすべて消えると(例外ハンドラが終了した後など)、例外は他のすべてと同様にガベージコレクションされます。
スタックセグメントまたはデータセグメントに配置する場合は、どこにありますか? – Thunderboltz
C++とは何ですか? – tuergeist
私はC++について何も知らない。彼は最初にJavaだけについて尋ねました、C++は後で来ました.. – Thilo
Javaの例外はオブジェクトなので、ヒープに格納されます。
例外がスローされると、JVMはコード内で一致する例外ハンドラを探します。これは何かが投げる可能性がある複数の例外がある場合でも適用されます。
例外はどこに保存されていますか? Stack、 ヒープ。メモリはどのように割り当てられ、 は例外として割り当て解除されますか?
例外はこの点で他のオブジェクトと同様です。 new
経由でヒープに割り当てられ、ガベージコレクタによって割り当てが解除されました。あなたが を処理する必要が複数の の例外を持っている場合
は、今作成したすべてのこれらの の例外のオブジェクトがありますか?
あなたはこれが何を意味するのかよく分かりません。それらはnew
で一度に1つ作成されます。例外連鎖を使用すると、複数の例外が発生することがあります。実際に何千もの例外を作成してリストのどこかに置くことはできません。それほど意味がありません。
例外の詳細については、Chapter 11: ExceptionsのThe Java Language Specification, Second Editionに直接アクセスしてください。
例外は実際にオブジェクトです。彼らはThrowable
のサブクラスである:
。そのようなオブジェクトは、 を使用して、例外が発生した ポイントから情報をキャッチするハンドラを に運ぶことができます。
したがって、Javaの他のObject
と同様に、ヒープ上に割り当てられることはおそらく安全でしょう。
複数のオブジェクトを持つという点では、おそらく例外ではありません.Java仮想マシンは例外ハンドラの検出を開始します。 例外をスローする過程
、Java仮想マシン は突然どんな 式、文、法及び始めている コンストラクタ呼び出し、初期化子、 及びフィールド初期化式 、一つ一つを完了します現在のスレッドで の実行が完了していません。この ハンドラが、 ハンドラが見つかるまで続きます。このハンドラは、 例外のクラスまたは 例外のクラスまたは スーパークラスの例外の名前を指定して処理したことを示します。
実行時に例外を処理する方法の詳細については、Section 11.3 Handling of an Exceptionに詳細があります。
C++の場合、例外を格納する場所は定義されていませんが、ほとんどのコンパイラは特別なスタックを使用します。 誰かが書いたJavaの場合、ヒープに格納されています。
例外はC++およびJavaのオブジェクトであるため、特定の言語でオブジェクトとして割り当てられ、割り当てが解除されます。
スレッドごとに常に両方の言語で有効な例外は1つだけです。
だったので、「新しい例外」を実行すると「特別なスタック」に格納されます。今、新しい演算子はどのスタックをいつ使うべきかを区別していますか?特別なケースを扱っていますか? – Thunderboltz
問題は、コンパイラがどのようにオブジェクトを例外として評価し、適切なマシンコードを提供するかです。私が言いたいのは、新しい演算子は区別する必要がないということです。 – tuergeist
ちなみに、「C++では例外を格納する場所が定義されていません」というメモを忘れないでください! – tuergeist
Javaでは、ExceptionはObjectを拡張するThrowableを拡張します。つまり、メモリの観点からは、他のどのようなオブジェクトでもあります。
Java変数では、スタック変数の候補を見つけるためにエスケープ解析を使用してスタックにローカル変数を配置することが推奨されています。ただし、例外は通常、メソッドから呼び出し元(または呼び出し元など)にスローされるため、例外をスタックに配置することはあまり役に立ちません。
- 1. 例外とJava
- 2. C++例外とシグナルハンドラ
- 3. 文字列インデックスJavaの例外例外
- 4. Javaの例外処理 - カスタム例外
- 5. Javaクラスの例外例外のジェネリック
- 6. Javaパス例外
- 7. Java IndexOutOfBounds例外
- 8. Java例外 - TransactionRolledbackLocalException
- 9. ヌルポインタ例外Java
- 10. Javaハイバーネーションランタイム例外
- 11. javaスレッド例外
- 12. Java json例外
- 13. C#スレッディングメモリ例外
- 14. C#JSON例外
- 15. C++デバッグブレーク例外
- 16. xsubpp C++例外
- 17. C#の:例外
- 18. C#IO例外
- 19. C#例外リスナー
- 20. 例外スローエラーC
- 21. 例外、C++
- 22. C++/C#例外スロー
- 23. Javaの再帰と例外
- 24. java junitと例外java.lang.NoClassDefFoundError
- 25. java例外とスキャナ入力
- 26. インタフェース例外例外
- 27. TransactionScope例外例外
- 28. 例外翻訳とJavaでの例外チェーンの比較
- 29. Javaインデックス配列境界外例外例外
- 30. java nullポインタ例外
また、C++での例外と同様に処理されるJavaの例外や追加の対策が必要ですか? – Thunderboltz
ユーザーはJavaやC++を指しているとは言わずにあなたに答えてくれるようです。一方、あなたはどちらについてお尋ねしますか? –
彼は最初にJavaだけについて尋ねました.C++は後で来ました... – Thilo