posts - 40, comments - 58, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Java Stack棧和Heap堆的區(qū)別

          Posted on 2009-01-20 11:59 Astro.Qi 閱讀(614) 評論(0)  編輯  收藏 所屬分類: Java
           在中文里,Stack可以翻譯為“堆棧”,計算機術(shù)語里面堆和棧開頭的詞語有:
                 堆存儲: heapstorage    堆存儲分配: heapstorage allocation  堆存儲管理: heap storage management
                  棧編址: stack addressing   棧變換:stack transformation  棧存儲器:stack memory  棧單元: stack cell
           
                    接著,總結(jié)在Java里面Heap和Stack分別存儲數(shù)據(jù)的不同。
           
                       Heap(堆)       Stack(棧)
           JVM中的功能      內(nèi)存數(shù)據(jù)區(qū)                    內(nèi)存指令區(qū)
           存儲數(shù)據(jù)      對象實例(1)  基本數(shù)據(jù)類型, 指令代碼,常量,對象的引用地址(2)
          1. 保存對象實例,實際上是保存對象實例的屬性值,屬性的類型和對象本身的類型標(biāo)記等,并不保存對象的方法(方法是指令,保存在stack中)。
            
             對象實例在heap中分配好以后,需要在stack中保存一個4字節(jié)的heap內(nèi)存地址,用來定位該對象實例在heap中的位置,便于找到該對象實例。
           
          2. 基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。
              函數(shù)方法屬于指令.
           
           =======================       
            引用網(wǎng)上廣泛流傳的“Java堆和棧的區(qū)別”里面對堆和棧的介紹;
                    "Java 的堆是一個運行時數(shù)據(jù)區(qū),類的(對象從中分配空間。這些對象通過new、newarray、anewarray和multianewarray等指令建 立,它們不需要程序代碼來顯式的釋放。堆是由垃圾回收來負(fù)責(zé)的,堆的優(yōu)勢是可以動態(tài)地分配內(nèi)存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態(tài)分 配內(nèi)存的,Java的垃圾收集器會自動收走這些不再使用的數(shù)據(jù)。但缺點是,由于要在運行時動態(tài)分配內(nèi)存,存取速度較慢。"
                  “棧的優(yōu)勢是,存取速度比堆要快,僅次于寄存器,棧數(shù)據(jù)可以共享。但缺點是,存在棧中的數(shù)據(jù)大小與生存期必須是確定的,缺乏靈活性。棧中主要存放一些基本 類型的變量(,int, short, long, byte, float, double, boolean, char)和對象句柄。
             
                   可見,垃圾回收GC是針對堆Heap的,而棧因為本身是FILO - first in, last out. 先進后出,能夠自動釋放。 這樣就能明白到new創(chuàng)建的,都是放到堆Heap!
          主站蜘蛛池模板: 安达市| 隆子县| 大名县| 馆陶县| 阳东县| 霞浦县| 孝义市| 五莲县| 龙海市| 镇巴县| 沙河市| 盈江县| 富顺县| 石门县| 南召县| 庄河市| 张家口市| 德令哈市| 凤山县| 伊宁县| 兴海县| 河北区| 六枝特区| 华容县| 宿迁市| 林芝县| 什邡市| 保定市| 开平市| 公主岭市| 盐池县| 长岭县| 四会市| 日土县| 普洱| 顺义区| 大同市| 武邑县| 城市| 阿瓦提县| 左贡县|