JVM內存管理之JVM內存分配策略

一:操作系統的內存分配策略

操作系統的內存分配策略主要分爲三種

靜態內存分配
棧內存分配
堆內存分配

靜態內存分配

靜態內存分配是在程序編譯時就能夠確定的每個數據的在運行時所需的內存空間。這種分配策略不允許程序中有可變的數據結構,也不允許有遞歸或嵌套結構出現。

棧內存分配

即動態內存分配,通過棧來實現。在動態內存分配方案中,程序對數據區的需求在編譯時是完全未知的,直到運行時才知道,但是規定程序在運行中進入一個程序模塊時,必須知道該程序模塊所需的數據區內存大小才能夠爲其分配內存。棧式內存分配按照先進後出的原則進行內存分配。

堆內存分配

只有到程序運行到相應的代碼是才知道內存分配空間的大小,就需要使用堆內存分配策略。

二:java的內存分配

jvm的內存分配主要是基於堆和棧的內存分配

1):棧內存分配

棧內存分配和java線程綁定,每創建一個線程是,java就會創建一個與之對應的java棧。線程的方法調用對應java棧的壓棧和出棧。每一個java方法對應一個棧幀。幀用來保存當前方法的參數,局部變量,中間計算過程和其他數據。
棧中主要存放基本類型數據和對象引用。

2):堆內存分配

java堆中存放應用程序運行時創建的所有類的實例或數組。java在創建一個對象是,在堆中分配該對象的存儲空間,在棧中建立一個指向這個對象的指針(引用)。java堆是一個運行時數據區,內存空間的回收由GC負責。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章