eric-1001c

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            3 隨筆 :: 45 文章 :: 12 評論 :: 0 Trackbacks

          1)Java程序運(yùn)行時,對象是怎么進(jìn)行安排放置的,內(nèi)存是怎么分配?Eckel在Thinking in java中對五個不同的存儲數(shù)據(jù)的地方進(jìn)行了簡要的介紹:

          a. 寄存器。最快的存儲區(qū)(位于處理器內(nèi)部),在Java里面,你不能直接控制,也不能在程序中感覺到寄存器的存在,可能是出于安全原因的考慮吧(C和C++允許編譯器建議寄存器的分配方式);

          b. 堆棧。位于通用RAM,隨即訪問存儲器中,但通過堆棧指針可以從處理器那里獲得直接支持。由于僅通過指針的上下移動即可控制內(nèi)存,所以速度上僅次與寄存器 。然而Java系統(tǒng)需要知道存儲在堆棧的所有項的生命周期,所以靈活性不高。因此一般只存儲對象的引用,而不直接存儲對象(基本類型一般也存放在這里的)

          c. 堆。通用的內(nèi)存池,也位于RAM。一般存放所有對象。堆是不用知道存儲的數(shù)據(jù)的存活時間的,當(dāng)需要一個對象的時候,通過new即可在堆里進(jìn)行存儲分配,這多少導(dǎo)致在清理堆的數(shù)據(jù)的不靈活性(基本類型的包裝器類存儲在堆中,也就是它是靠引用而“存活”的)

          d. 常量存儲。常量值通常直接存放在程序代碼內(nèi)部。在必要的情況下,可以選擇將其放在ROM中(字符串池正是這樣的一個例子)

          e. 非RAM存儲。放在非RAM存儲中目的主要是為了讓數(shù)據(jù)存活在程序之外,其中兩個基本的例子是流對象和持久化對象

           

          2)在Java中,所有數(shù)值類型都有正負(fù)號,所以不要尋找無符號的數(shù)值類型;

          3)boolean類型所占存儲空間的大小沒有明確指定,僅定義為能夠取字面值true或false;

          4)JavaSE5 自動包裝功能將自動將基本類型轉(zhuǎn)換為包裝器類型:

          Character ch = 'x';

          并可以方向轉(zhuǎn)換, char c = ch;

          5)Java不允許重復(fù)定義相同名字的基本類型(C/C++可以)

           

          {
              
          int x = 12;
               
          {
                   
          int x = 1// Illegal
               }

          }

           

          6)基本類型的作用域和對象的作用域都受限于花括號“{}”,一旦超出它們所在的花括號,那它們就消失了。但基本類型的消失是指在堆棧中的內(nèi)存被收回,而對象的消失只是在堆棧中的存放對象引用的內(nèi)存被收回,但其對象(堆中的)還存活,除非立刻通過垃圾回收機(jī)制回收了。這樣的設(shè)計有利于字符串池的實(shí)現(xiàn)

          7)若類的某個成員是基本數(shù)據(jù)類型,即使沒有進(jìn)行初始化,也會獲得一個默認(rèn)值。然而對于“局部”變量,即并非某個類的字段,比如在某個方法在定義的,如果沒有進(jìn)行初始化,Java系統(tǒng)在編譯的時候會報錯的。

          posted on 2007-07-11 00:27 Eric-1001c 閱讀(192) 評論(0)  編輯  收藏 所屬分類: ThinkingInJava
          主站蜘蛛池模板: 岑溪市| 宜章县| 黄大仙区| 天全县| 嘉鱼县| 武乡县| 涿州市| 南澳县| 宁乡县| 盐池县| 苗栗市| 崇礼县| 屯留县| 海南省| 东明县| 车险| 商城县| 乐亭县| 原阳县| 玉树县| 巴塘县| 台中县| 珲春市| 托里县| 涡阳县| 类乌齐县| 大宁县| 穆棱市| 桂平市| 乐山市| 灵武市| 北京市| 垣曲县| 内丘县| 闻喜县| 门源| 德钦县| 合川市| 江门市| 仪征市| 固阳县|