jvm元空間與堆和棧的區別?
1內存分配策略
1)靜態存儲:編譯時確定每個數據目標在運行時的存儲空間需求(代碼中無可變數據結構無嵌套遞歸)。
2)棧式存儲:數據需求在編譯時未知,運行時模塊入口確定,動態分配存儲,在運行中進入一個程序模塊時,必須知道該程序模塊所需要的數據區的大小才能分派其內存。
3)堆式存儲:編譯時和運行時模塊入口無法確定,動態分配。
2Java內存模型中的堆與棧
1)二者聯系:引用對象、數組時棧里定義的變量保存的是堆中目標的首地址。
2)二者區別:
(1)管理方式:棧自動釋放(對應方法執行完畢),堆需要GC(垃圾回收機制)
(2)空間大小:堆比棧大。
(3)碎片:棧產生的碎片遠小于堆產生的碎片。
(4)分配方式:棧支持靜態和動態分配,堆只能動態分配。
(5)效率:堆比棧的效率低。
(6)棧為線程私有,堆為線程共享。