[英]Java memory (Stack) allocation for local variables
我正在學習java,現在我陷入了對象和局部變量的內存分配。 任何人都可以說明或澄清我的一些疑惑嗎?
謝謝Mahaveer
每個線程都有自己的堆棧 。
new
,都會在堆上創建一個對象 。 int
)和對創建的任何對象的引用 。 實際的對象本身並不是在堆棧上創建的,正如我在使用 new
時提到的那樣, 它們將在堆上創建。 我有問題,天氣為每種方法創建一個新的STACK?
調用方法時使用相同的堆棧。 一個方法將在堆棧上創建它自己的小部分,稱為“堆棧幀”,用於保存它的局部變量。
它就像一堆板,當一個方法被稱為板時,板被添加到堆棧的頂部( 堆棧框架 ),當該方法結束時,板從堆棧中移除。 所有該方法的局部變量都將隨之被銷毀,但使用new
創建的實際對象則不會。
當JVM的垃圾收集器看到你不再需要它們時,它將會破壞堆上的 對象 (用new
創建的對象 )。
堆棧以一對一的映射與線程相關聯。 堆棧絕對不與方法和類相關聯。
推理所有這些的方法是方法的局部變量對於該方法的每次調用都是私有的 。
當然,java垃圾收集器總是處理堆,當它有機會被執行時,所以它只查找孤立對象並將它們擦除,這就是為什么java中的NEW關鍵字總是在堆內存上創建新對象的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.