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

java中堆和棧的區別

mem 線程 所有 生成 werror 空間 調用 訪問 指向

01,各司其職;

        棧內存用來存儲局部變量和方法的調用,

        而堆內存用來存儲java中的對象,無論是成員變量,局部變量,還是類變量

        他們指向的對象都存儲在堆內存中。

02,獨有還是共享;

        棧內存歸屬於單個線程,每個線程都會有一個棧內存,其存儲的對象

        只能在其所屬的線程中可見,即棧內存可以理解為私有內存,而堆內存中的對象

        對所有線程可見,隊內存中的對象可以被所有線程訪問

03,異常錯誤;

        如果棧內存沒有可用的空間存儲方法調用和局變量,jvm會拋出

        java.lang.StackOverFlowError.

        如果堆內存中沒有可用的空間存儲生成的對象,jvm會拋出

        java.lang.OutOfMemoryErroy

04,內存;

      棧內存要遠遠小於堆內存

  

  

         

java中堆和棧的區別