5

メインスレッドのスタックサイズを動的に(実行時に)増やす方法があるかどうか誰かが知っていますか?また、同じ質問だと思いますが、Threadインスタンス化後にスタックサイズを増やしたり更新したりすることはできますか?

ThreadのCTORではスタックサイズを定義できますが、更新する方法が見つかりません。実際、JDKでスタックサイズの管理を見つけることができませんでした(これは不可能であることを示す傾向があります)。すべてがVMで行われます。

Java言語の仕様によれば、「スタックの作成時に」スタックサイズを設定することは可能ですが、次の点に注意してください。

Java仮想マシンの実装により、プログラマーまたはユーザーは、Java仮想マシンスタックの初期サイズを制御できます。また、Java仮想マシンスタックを動的に拡張または縮小する場合は、最大サイズと最小サイズを制御できます。

IMOはあまり明確ではありませんが、一部のVMは、特定の範囲内で進化する最大(編集)スタックサイズのスレッドを処理することを意味しますか?Hostpotでそれを行うことはできますか(Xss以外にスタックサイズに関連するオプションは見つかりませんでした)?

ありがとう !

4

2 に答える 2

5

スタックサイズは、使用時に動的に更新されるため、これを行う必要はありません。

設定できるのは、使用可能な最大サイズです。-Xssこれは、使用される仮想メモリサイズであり、64ビットJVMで好きなだけ大きくすることができます。実際に使用されるメモリは、使用するメモリの量に基づいています。;)

編集:重要な違​​いは、最大サイズが仮想メモリとして予約されていることです(ヒープもそうです)。つまり、アドレススペースは予約されているため、拡張できません。32ビットシステムでは、アドレススペースが限られていますが、これは依然として問題になる可能性があります。ただし、64ビットシステムでは、通常、最大256 TBの仮想メモリ(プロセッサの制限)があるため、仮想メモリは安価です。実際のメモリはページ(通常は4 KB)で割り当てられ、使用時にのみ割り当てられます。これが、起動時に最大ヒープサイズが割り当てられている場合でも、Javaアプリケーションのメモリが時間の経過とともに増大するように見える理由です。同じことがスレッドスタックでも起こります。実際に触れたページのみが割り当てられます。

于 2012-04-13T08:35:02.173 に答える
3

標準のJDKでこれを行う方法stackSizeはなく、議論でさえも決まっていない:

stackSizeパラメーターの効果は、プラットフォームに大きく依存します。...一部のプラットフォームでは、stackSizeパラメーターの値がまったく影響しない場合があります。...仮想マシンは、stackSizeパラメーターを提案として自由に扱うことができます。

(オリジナルの強調。)

于 2012-04-13T06:54:29.390 に答える