簡體   English   中英

局部變量的Java內存(Stack)分配

[英]Java memory (Stack) allocation for local variables

我正在學習java,現在我陷入了對象和局部變量的內存分配。 任何人都可以說明或澄清我的一些疑惑嗎?

  1. 我讀到了對象的實例變量和局部變量的堆和堆棧內存。 我有疑問是否為每個方法創建了一個新的STACK? 或者對於單個堆棧的每個類是由整個類使用的?
  2. 我已經讀過每個線程正在創建ONE STACK是什么意思

謝謝Mahaveer

每個線程都有自己的堆棧

  • 無論何時使用new ,都會在堆上創建一個對象
  • 局部變量存儲在堆棧中。 這包括基元 (例如int )和對創建的任何對象的引用 實際的對象本身並不是在堆棧上創建的,正如我在使用 new 時提到的那樣, 它們將在堆上創建。

我有問題,天氣為每種方法創建一個新的STACK?

調用方法時使用相同的堆棧。 一個方法將在堆棧上創建它自己的小部分,稱為“堆棧幀”,用於保存它的局部變量。

它就像一堆板,當一個方法被稱為板時,板被添加到堆棧的頂部( 堆棧框架 ),當該方法結束時,板從堆棧中移除。 所有該方法的局部變量都將隨之被銷毀,但使用new創建的實際對象則不會。

當JVM的垃圾收集器看到你不再需要它們時,它將會破壞堆上的 對象 (用new創建的對象 )。

  • 每個線程都有一個私有堆棧。
  • 每個方法在該線程的堆棧中都有一個私有堆棧幀

堆棧以一對一的映射與線程相關聯。 堆棧絕對不與方法和類相關聯。

推理所有這些的方法是方法的局部變量對於該方法的每次調用都是私有的

當然,java垃圾收集器總是處理堆,當它有機會被執行時,所以它只查找孤立對象並將它們擦除,這就是為什么java中的NEW關鍵字總是在堆內存上創建新對象的原因。

暫無
暫無

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

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