一、方法在執行過程中是如何分配記憶體的,記憶體是如何變化的? 1.方法只定義,不調用,是不會執行的,並且在JVM中也不會給該方法分配”運行所屬“的記憶體空間,只有在調用這個方法的時候,才會動態的給這個方法分配所屬的記憶體空間。 2.在JVM記憶體劃分上有這樣三個主要的記憶體空間(當然除了這三塊之外還有其他的記憶體 ...
一、方法在執行過程中是如何分配記憶體的,記憶體是如何變化的?
1.方法只定義,不調用,是不會執行的,並且在JVM中也不會給該方法分配”運行所屬“的記憶體空間,只有在調用這個方法的時候,才會動態的給這個方法分配所屬的記憶體空間。
2.在JVM記憶體劃分上有這樣三個主要的記憶體空間(當然除了這三塊之外還有其他的記憶體空間);
(1)方法區記憶體;(2)堆記憶體;(3)棧記憶體;
3.關於棧數據結構:
(1)棧:stack,是一種數據結構
(2)數據結構反應的是數據的存儲形態。
(3)數據結構是獨立的學科,不屬於任何編程語言的範疇,只不過在大多數編程語言中要使用數據結構。
(4)常見的數據結構:數組、隊列、棧、鏈表、二叉樹、哈希表/散列表
(5)Java在不精通數據結構和演算法的前提下,也可以進行開發,因為java擁有強大的庫
棧:
(1)棧幀永遠指向棧頂元素
(2)棧頂元素處於活躍狀態,其他元素靜止
(3)術語:
壓棧/入棧/push
彈棧/出棧/pop
(4)棧數據結構存儲數據的特點是:先進後出,後進先出
4.方法代碼片段存儲在哪裡?方法執行的時候執行過程中的記憶體是在哪裡分配的?
(1)方法代碼片段屬於.class位元組碼文件的一部分,位元組碼文件在類載入的時候,將其放到了方法區之中,所以JVM中的三塊主要的記憶體空間中方法區記憶體最先由數據,存放了代碼片段
(2)代碼片段雖然在方法區記憶體中只有一份,但是可以被重覆調用,每一次調用這個方法的時候,需要給該方法分配獨立的活動場所,在棧記憶體中分配。(棧記憶體中分配方法運行的所屬記憶體空間)
5.方法在調用的手,會給該方法分配獨立的記憶體空間,在棧中分配,此時發生壓棧動作,方法執行結束之後,給該方法分配的記憶體空間全部釋放,此時發生彈棧動作。
壓棧是給該方法分配記憶體
彈棧是給該方法釋放記憶體空間
6.局部變數在“方法體”中聲明,局部變數運行階段記憶體中在棧中分配。
二、源碼:
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,後臺回覆”禮包“,獲取大數據學習資料