1. 程式人生 > >JVM中堆和棧的區別

JVM中堆和棧的區別

動態分配內存 分配內存 err ava error tof over 可用 flow

1、棧是線程私有的;堆事線程公有的。
2、棧主要用於存儲局部變量和對象的引用變量;堆主要用於存儲實例化的對象,數組,由JVM動態分配內存空間。
3、棧中的變量超過其作用域後,JVM會自動釋放掉為該變量所分配的內存空間,該內存空間可以立即被另作他用;在堆中分配的內存,由JVM自動垃圾回收器來管理。
4、如果棧內存沒有可用的空間存儲方法調用和局部變量,JVM會拋出java.lang.StackOverFlowError;而如果是堆內存沒有可用的空間存儲生成的對象,JVM會拋出java.lang.OutOfMemoryError。
5、棧的內存要遠遠小於堆內存。

JVM中堆和棧的區別