簡體   English   中英

堆棧幀大小是否有上限

[英]Is there a upper limit on stack frame size

我們有一個堆的內存不足錯誤但是(只是出於好奇心)是否有單獨堆棧大小的等效限制? 如果沒有,那么如果堆棧幀需要多余的內存(如數千個本地變量等),那么是什么阻止了這種溢出?

如果一個線程請求的堆棧空間多於可用堆棧空間,則會收到StackOverflowError。

http://docs.oracle.com/javase/7/docs/api/java/lang/StackOverflowError.html

單個堆棧幀的大小在編譯時確定,並與方法的代碼一起存儲在類文件中。 實際上有兩個字段:局部變量數組的大小和操作數堆棧的深度。 兩者都限於2 ^ 16-1。 http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#1546

我認為,分配給運行時堆棧的空間適用於單個執行線程上的所有堆棧幀。

大多數操作系統的默認大小不同。 看看這些文檔。 如果需要使用-Xss JVM參數,可以增加大小。

http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

每個線程都有自己的堆棧空間分配。 您可以使用Java命令行上的-Xss選項設置此分配的大小; 默認值在不同平台上有所不同,但它始終是“每個線程”的數量。

限制是每個線程的內存量,而不是堆棧上的條目數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM