Java面試:說一下堆、棧、方法區的區別

堆和棧都是Java用來在RAM中存放數據的地方。
區別總結:1.存儲數據類型不同 2.線程使用情況不同 3.存取速度不同

堆:
    1.提供所有類實例和數組對象存儲區域

    2.jvm只有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身
    
    3.Java的堆是一個運行時數據區,類的對象從堆中分配空間。這些對象通過new等指令建立,通過垃圾回收器來銷燬。

    4.堆的優勢是可以動態地分配內存空間,需要多少內存空間不必事先告訴編譯器,因爲它是在運行時動態分配的。
    但缺點是,由於需要在運行時動態分配內存,所以存取速度較慢。
    
棧:
    1.每個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中

    2.每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問。
    
    3.棧中主要存放一些基本數據類型的變量(byte,short,int,long,float,double,boolean,char)和對象的引用。

    4.棧的優勢是,存取速度比堆快,棧數據可以共享。但缺點是,存放在棧中的數據佔用多

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