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、方法區中包含的都是在程序中永遠的唯一的元素