簡體   English   中英

為什么沒有方法來獲得堆棧的實際大小?

[英]Why is there no method to get the actual size of the stack?

我知道在運行時沒有辦法在Java中獲取線程的堆棧大小(參見可以在運行一段時間后獲得Java中線程使用的實際堆棧大小嗎? )。

例如,如果我們創建一個指定堆棧大小為64 * 1024的java.lang.Thread ,JVM可以自由地為我們提供任何堆棧大小的線程。

但是,我相信實際上知道堆棧的實際大小對於需要這種信息的某些應用程序非常有用。

我們沒有一個方法告訴我們堆棧使用的實際字節數是什么原因?

架構中是否存在某種限制,使得無法獲得線程的實際字節數?

存儲在堆棧中的唯一東西是原始類型和引用。 始終在堆上創建對象,因此將存儲在堆棧中的數據類型是

  • 類型為byte,char,int,long,float,double的局部變量是double中最長的兩倍,即8個字節
  • 對象的引用是32位vm上的4個字節,64位vms上的8個字節(可能更短,48位引用用於節省空間)

請注意,數組是對象類型,因此它們存儲在堆上,如果您的基元是類中的字段,則基元是對象的一部分,因此將存儲在堆上。

所以除非你有跑道遞歸,否則很難用完一個線程的堆棧空間。 我想這就是Java設計師沒有給你一種方法來找出堆棧大小的原因。

不給出堆棧大小的另一個原因是它將是一個實際的細節,你無法真正做任何事情,你不能在創建線程后改變線程堆棧的大小,你不能做指針算術那么知道堆棧大小有什么意義呢?

暫無
暫無

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

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