棧,堆,方法區


1、java中的棧(stack)和堆(heap)是java在內存(ram)中存放數據的地方

2、堆區

     存儲的全部是對象,每個對象都包含一個與之對應的class的信息。(class的目的是得到操作指令);

     jvm只有一個heap區,被所有線程共享,不存放基本類型和對象引用,只存放對象本身。

     堆的優劣勢:堆的優勢是可以動態的分配內存大小,生存期也不必事先告訴編譯器,java的垃圾收集器會自動收取這些不在使用的數據,但缺點是,由於要在運行時動態分配內存,存取速度慢。

3、棧區

     每一個線程包含一個stack區,只保存基本數據類型的對象和自定義對象的引用(不是對象),對象都存放在共享heap中;

     每個棧中的數據(基本數據類型和對象引用)都是私有的,其他棧不能訪問;

     棧分為3部分:基本類型變量區、執行環境上下文、操作指令區(存放操作指令)

  棧的優勢劣勢:存取速度比堆要快,僅次於直接位於CPU的寄存器,但必須確定的是存在stack中的數據大小與生存期必須是確定的,缺乏靈活性。單個stack的數據可以共享。

      stack:是一個先進后出的數據結構,通常保存方法中的參數,局部變量。

     在java中,所有基本類型和引用類型都在stack中儲存,棧中數據的生存空間一般在當前scopes內

4、方法區

     1、又叫靜態區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變量;

     2、方法區中包含的都是在程序中永遠的唯一的元素


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM