氟塑料離心泵www.buybeng.com

          jquery教程http://www.software8.co/wzjs/jquery/

          我們愛面試,一面一學(xué)-----JAVA堆、棧

          爛俗的問題往往是最容易問到的問題,想必諸多面友都深有體會,因為我們和我們的面試官們都是俗人。但從另一方面來說,爛俗往往有著廣闊的延伸空間,一次次讓爛俗震驚你,不然于丹老師也就發(fā)不了財了。

                  言歸正傳,關(guān)于堆、棧真的很豐富、很值得研究。了解的不深,暫且按照個人的理解、思路來做筆記。

                 1---定義。堆、棧都是內(nèi)存中的數(shù)據(jù)區(qū),JVM用來存放程序中的數(shù)據(jù),當(dāng)然程序員是不可以直接操作這兩個區(qū)(都是由JVM操作的,包括new一個對象和垃圾對象回收)。

                  2---區(qū)別。(1):棧中的數(shù)據(jù)存取速度要比堆中的快許多,據(jù)說僅次于CPU中的寄存器(這是不重要的一條)。

                                     (2):棧中的數(shù)據(jù)是共享的(這點不重要,但是很麻煩,尤其是對理解String的存放重要)。

                                    (3):棧中的數(shù)據(jù)大小、生存周期必須是固定的(這點也不是很重要)。

                                    (4):棧中存放基礎(chǔ)類型變量(byte、short、int、long、float、double、boolean、char),堆中存放引用類型變量(類、數(shù)組、枚舉、接口)。這條是籠統(tǒng)、概述性質(zhì)的,不完全正確。

          下面具體描述、解釋以上4條。

          第一條。關(guān)于存取速度,不是很重要,了解就可以,沒想到什么辦法可以測定一下。這個應(yīng)該是對內(nèi)存區(qū)的分配問題,沒能力詳細敘述了。

          第二條。棧中的數(shù)據(jù)是共享的。這種問題得舉例來說了。例如一段代碼

          1. int a = 1;  
          2. int b =1;  
          3. b = 2;  
          對于這段代碼,JVM的執(zhí)行如下。首先在棧中開辟空間存放字面值1,然后將a指向1,也可以稱a為字面值1的引用。然后,定義變量b的時候,JVM會現(xiàn)在本函數(shù)的棧區(qū)域中搜索是否有字面值1,如果有,則將b指向1,而不需要再開辟空間存放1字面值。最后,當(dāng)給b變量重新賦值的時候,JVM同樣在棧中搜索2字面值,如果找到,則將b指向這個字面值;如果沒找到則重新開辟空間存放2字面值。

          第三條。棧中的數(shù)據(jù)大小、生存周期都是已知的。如果在某個函數(shù)中聲明了基礎(chǔ)類型變量,則在函數(shù)調(diào)用結(jié)束的時候變量生存周期結(jié)束,即生存周期已知。

          第四條。關(guān)于什么類型的變量存放在哪時最常問的問題。首先8中基礎(chǔ)類型變量毫無疑問的會存放在棧中。其次自己定義的類對象也都會存放在堆中。最后有幾種比較特殊的變量需要詳細解釋。

          (1)String類型。首先,如果用String str = new String("asdf");來新建對象,會毫無疑問的存入堆中。但如果使用String str = "asdf",來聲明變量則會放入棧中,并遵守棧中數(shù)據(jù)共享的原則。例如以下代碼。

          1. String a = "abc";  
          2. String b = "abc";  
          3. b = "cde";  
          首先JVM在本函數(shù)的棧中開辟空間新建對象值為“abc”的字符串,并建立引用o指向abc,并在“abc”的內(nèi)存地址旁記錄引用o。當(dāng)聲明定義b字符串的時候,JVM首先在棧中搜索字符串“abc”,如果找到就返回引用o,并將o賦給新的b變量。最后給b字符串重新賦值的時候,也要在棧中搜索,如果沒找到則新建對象。

          (2)數(shù)組。因為數(shù)組是繼承了超類object,所以也要看做對象,即也要存放在堆中。

          (3)枚舉。同上。

          還需要澄清的一點是,當(dāng)聲明、初始化了對象之后,對象的內(nèi)容的確存放在了堆中,但對象的引用是存放在棧中的
          個人網(wǎng)站 www.software8.co

          posted on 2012-09-27 17:49 你爸是李剛 閱讀(1440) 評論(1)  編輯  收藏

          評論

          # re: 我們愛面試,一面一學(xué)-----JAVA堆、棧 2012-10-10 14:18 熱轉(zhuǎn)印

          這個可以有  回復(fù)  更多評論   


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


          網(wǎng)站導(dǎo)航:
           
          <2012年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          技術(shù)網(wǎng)站

          行業(yè)網(wǎng)站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          站長網(wǎng) 氟塑料離心泵 注塑機 液晶廣告機
          主站蜘蛛池模板: 莱芜市| 巩义市| 阳原县| 都江堰市| 抚顺县| 武川县| 莱阳市| 全椒县| 漳平市| 永城市| 桑植县| 保康县| 忻城县| 五指山市| 永川市| 阳春市| 郓城县| 鸡西市| 山西省| 普安县| 襄樊市| 祁门县| 双江| 湘潭市| 河北省| 新津县| 昌平区| 通城县| 墨竹工卡县| 阜新市| 扎囊县| 辽源市| 贡觉县| 贡山| 闵行区| 嘉鱼县| 剑阁县| 永登县| 吴桥县| 屏东市| 台北县|