eric-1001c

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

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

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

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

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

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

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

           

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

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

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

          Character ch = 'x';

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

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

           

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

          }

           

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

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

          posted on 2007-07-11 00:27 Eric-1001c 閱讀(194) 評(píng)論(0)  編輯  收藏 所屬分類: ThinkingInJava

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 琼结县| 高邑县| 宝坻区| 木兰县| 双江| 宁安市| 周至县| 阿城市| 垫江县| 靖远县| 克东县| 如皋市| 温州市| 上饶县| 松阳县| 盐亭县| 巴东县| 仲巴县| 专栏| 华阴市| 宣威市| 甘孜县| 湖州市| 于田县| 封丘县| 鲁山县| 延边| 陆丰市| 北辰区| 翁源县| 昌黎县| 淮南市| 灌阳县| 肃宁县| 龙岩市| 苍梧县| 荣昌县| 施甸县| 桐梓县| 泸水县| 汉中市|