JAVA Stack栈和Heap堆的区别(转)
生活随笔
收集整理的這篇文章主要介紹了
JAVA Stack栈和Heap堆的区别(转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?? ? ?首先分清楚Stack,Heap的中文翻譯:Stack—棧,Heap—堆。 在中文里,Stack可以翻譯為“堆棧”,所以我直接查找了計算機術語里面堆和棧開頭的詞語: ?堆存儲: heapstorage??? 堆存儲分配: heapstorage allocation? 堆存儲管理: heap storage management ?棧編址: stack addressing? ?棧變換:stack transformation? 棧存儲器:stack memory? 棧單元: stack cell 接著,總結在Java里面Heap和Stack分別存儲數據的不同。
1. 保存對象實例,實際上是保存對象實例的屬性值,屬性的類型和對象本身的類型標記等,并不保存對象的方法(方法是指令,保存在stack中)。
???
?? 對象實例在heap中分配好以后,需要在stack中保存一個4字節的heap內存地址,用來定位該對象實例在heap中的位置,便于找到該對象實例。 2. 基本數據類型包括byte、int、char、long、float、double、boolean和short。
??? 函數方法屬于指令. =======================??????? 引用網上廣泛流傳的“Java堆和棧的區別”里面對堆和棧的介紹; ????????? "Java 的堆是一個運行時數據區,類的(對象從中分配空間。這些對象通過new、newarray、anewarray和multianewarray等指令建立,它們不需要程序代碼來顯式的釋放。堆是由垃圾回收來負責的,堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配內存的,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由于要在運行時動態分配內存,存取速度較慢。" ??????? “棧的優勢是,存取速度比堆要快,僅次于寄存器,棧數據可以共享。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。棧中主要存放一些基本類型的變量(,int, short, long, byte, float, double, boolean, char)和對象句柄。?” ??? ??????? ?可見,垃圾回收GC是針對堆Heap的,而棧因為本身是FILO - first in, last out. 先進后出,能夠自動釋放。 這樣就能明白到new創建的,都是放到堆Heap! http://android.blog.51cto.com/268543/50100/
| ?????? | ????? Heap(堆) | ????? Stack(棧) |
| ?JVM中的功能 | ?????內存數據區???? | ?????????????? 內存指令區 |
| ?存儲數據 | ???? 對象實例(1) | ?基本數據類型, 指令代碼,常量,對象的引用地址(2) |
???
?? 對象實例在heap中分配好以后,需要在stack中保存一個4字節的heap內存地址,用來定位該對象實例在heap中的位置,便于找到該對象實例。 2. 基本數據類型包括byte、int、char、long、float、double、boolean和short。
??? 函數方法屬于指令. =======================??????? 引用網上廣泛流傳的“Java堆和棧的區別”里面對堆和棧的介紹; ????????? "Java 的堆是一個運行時數據區,類的(對象從中分配空間。這些對象通過new、newarray、anewarray和multianewarray等指令建立,它們不需要程序代碼來顯式的釋放。堆是由垃圾回收來負責的,堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配內存的,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由于要在運行時動態分配內存,存取速度較慢。" ??????? “棧的優勢是,存取速度比堆要快,僅次于寄存器,棧數據可以共享。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。棧中主要存放一些基本類型的變量(,int, short, long, byte, float, double, boolean, char)和對象句柄。?” ??? ??????? ?可見,垃圾回收GC是針對堆Heap的,而棧因為本身是FILO - first in, last out. 先進后出,能夠自動釋放。 這樣就能明白到new創建的,都是放到堆Heap! http://android.blog.51cto.com/268543/50100/
總結
以上是生活随笔為你收集整理的JAVA Stack栈和Heap堆的区别(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经常梦到大便是什么意思
- 下一篇: 梦到黄金掉了什么预兆