最近JVM内部について読んでいて、その要素の1つ、つまりメソッドのオペランドスタックに関する質問がありました。それは最大のサイズを持っていますし、私たちはそれをオーバーフローさせることができますか?手動で行うことはできますか、それともどのような状態が発生する可能性がありますか?Javaメソッドのオペランドスタック
1
A
答えて
1
最大サイズは、メソッドごとにMaxStack属性で設定されます。より大きなオペランドスタック(または不定サイズのオペランドスタック)を作成すると、検証エラーが発生するため、実際には動的にオーバーフローさせることはできません。正しい(制限内に留まる)か、ロードさえしません。
MaxStack属性のタイプはuint16のであるので、あなたは
-1スロットにオペランドスタックのサイズアップを指定することができます。ワイド型は、ローカル変数と同じように2スロットを使用します。だから実際には大きなJavaの式は理論的には解消できませんが、実際にはjavac
はその前にずっとスタックスペース(実際のスタックスペース、オペランドスタックではなく)が不足しています。
属性が正しく設定されていないと、MaxStack属性で設定した制限を超えてしまうことがあります。これは、ClassWriterを十分注意しなくても発生することがあります。
関連する問題
- 1. ストリームマッピングのJavaメソッドのvoidメソッド?
- 2. のjava getMethod()メソッド
- 3. Javaのclone()メソッド
- 4. Javaメソッドのデザインパターン
- 5. JavaのChangePasswordメソッド
- 6. Javaのメソッド
- 7. JavaのaddPropertyChangeListenerメソッド
- 8. Javaのメソッドのループエラー
- 9. Javaのメソッドのキュー
- 10. Java、別のメソッドの中のメソッド宣言?
- 11. のJavaでReplaceAll()メソッド
- 12. Javaメソッドの構文
- 13. Javaの汎用メソッド
- 14. IO javaのSkip()メソッド?
- 15. Javaの静的メソッド
- 16. のJava、オブジェクトとメソッド
- 17. Javaメソッドの効率
- 18. Javaの静的メソッド
- 19. Javaの静的メソッド
- 20. - JavaのString.equal(String)メソッド
- 21. Javaのスタブ・プライベート・メソッド
- 22. メソッド間のJavaオブジェクトスコープ
- 23. ニュートンのRaphsonsメソッドJava
- 24. メソッドのオーバーロードとJava
- 25. Javaの汎用メソッド
- 26. ThreadPoolExecutorのworkerCountOf()メソッドjava
- 27. Javaのメソッドとクラス
- 28. メソッド呼び出し中のメソッドjava
- 29. Javaファクタージェネレータープログラムnextfactorメソッド
- 30. Java APIがメソッド
最大サイズは、JVMに割り当てられたメモリから、すでに使用されているメモリを差し引いたもので表されます。 –