国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

深入理解Java的棧與堆棧

2019-11-06 06:17:00
字體:
來源:轉載
供稿:網友
java中,有六個不同的地方可以存儲數據:   1. 寄存器(register)。這是最快的存儲區,因為它位于不同于其他存儲區的地方——處理器內部。但是寄存器的數量極其有限,所以 寄存器由編譯器根據需求進行分配。你不能直接控制,也不能在程序中感覺到寄存器存在的任何跡象。   2. 堆棧(stack)。位于通用RAM中,但通過它的“堆棧指針”可以從處理器哪里獲得支持。堆棧指針若向下移動,則分配新的內存;若  向上移動,則釋放那些內存。這是一種快速有效的分配存儲方法,僅次于寄存器。創建程序時候,JAVA編譯器必須知道存儲在堆棧內所  有數據的確切大小和生命周期,因為它必須生成相應的代碼,以便上下移動堆棧指針。這一約束限制了程序的靈活性,所以雖然某些JA VA數據存儲在堆棧中——特別是對象引用,但是JAVA對象不存儲其中。   3. 堆(heap)。一種通用性的內存池(也存在于RAM中),用于存放所以的JAVA對象。堆不同于堆棧的好處是:編譯器不需要知道要從堆  里分配多少存儲區域,也不必知道存儲的數據在堆里存活多長時間。因此,在堆里分配存儲有很大的靈活性。當你需要創建一個對象的時候  ,只需要new寫一行簡單的代碼,當執行這行代碼時,會自動在堆里進行存儲分配。當然,為這種靈活性必須要付出相應的代碼。用堆進行 存儲分配比用堆棧進行存儲存儲需要更多的時間。   4. 靜態存儲(static storage)。這里的“靜態”是指“在固定的位置”。靜態存儲里存放程序運行時一直存在的數據。你可用關鍵字static 來標識一個對象的特定元素是靜態的,但JAVA對象本身從來不會存放在靜態存儲空間里。   5. 常量存儲(constant storage)。常量值通常直接存放在程序代碼內部,這樣做是安全的,因為它們永遠不會被改變。有時,在嵌入 式系統中,常量本身會和其他部分分割離開,所以在這種情況下,可以選擇將其放在ROM中   6. 非RAM存儲。如果數據完全存活于程序之外,那么它可以不受程序的任何控制,在程序沒有運行時也可以存在。  就速度來說,有如下關系:  

 寄存器 < 堆棧 < 堆 < 其他 。

 比較類里面的數值是否相等時,用equals()方法;當測試兩個包裝類的引用是否指向同一個對象時,用==,下面用例子說明上面的理論。  String str1 = "abc";  String str2 = "abc";  System.out.PRintln(str1==str2); //true  可以看出str1和str2是指向同一個對象的。  String str1 =new String ("abc");  String str2 =new String ("abc");  System.out.println(str1==str2); // false  用new的方式是生成不同的對象。每一次生成一個。      因此用第二種方式創建多個”abc”字符串,在內存中其實只存在一個對象而已. 這種寫法有利與節省內存空間. 同時它可以在一定程度上提高程序的運行速度,因為JVM會自動根據棧中數據的實際情況來決定是否有必要創建新對象。而對于String str = new String("abc");的代碼,則一概在堆中創建新對象,而不管其字符串值是否相等,是否有必要創建新對象,從而加重了程序的負擔。      另一方面, 要注意: 我們在使用諸如String str = "abc";的格式定義類時,總是想當然地認為,創建了String類的對象str。(不一定,因為如果事先沒有,那么就會創建,這就是創建對象了,如果原來就有,那就指向那個原來的對象就可以了)!對象可能并沒有被創建!而可能只是指向一個先前已經創建的對象。只有通過new()方法才能保證每次都創建一個新的對象。由于String類的immutable性質,當String變量需要經常變換其值時,應該考慮使用StringBuffer類,以提高程序效率。 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙田区| 紫金县| 西乡县| 英山县| 海南省| 育儿| 肥东县| 铜川市| 巧家县| 武穴市| 隆化县| 潮安县| 舒城县| 闽侯县| 孟津县| 浮梁县| 丹棱县| 敖汉旗| 江永县| 石狮市| 洞口县| 如东县| 蓬莱市| 济阳县| 漾濞| 汉寿县| 长泰县| 宜城市| 峨边| 广饶县| 肃南| 隆林| 石门县| 平定县| 承德县| 清远市| 吴堡县| 繁昌县| 盘锦市| 彝良县| 张家口市|