亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java中的數據存儲結構

2019-11-06 06:02:01
字體:
來源:轉載
供稿:網友

java中的數據存儲結構

在java中數據的存儲結構可以分為六種:

寄存器存儲區堆棧區堆區靜態存儲區常量存儲區非RAM數據存儲區

寄存器存儲區

由于位于處理器cpu的內部,所以其是最快的存儲區,然而寄存器的空間極其珍貴有限,所以程序開發者無法直接控制寄存器空間的分配,它的分配工作是由編譯器自行分配的.

特點:最快的存儲區, 由編譯器根據需求進行分配,開發者在程序中無法進行控制.

堆棧存儲區

位于通用RAM中,即內存中。它可以通過”堆棧指針”從cpu那里獲取支持,通過操作”堆棧指針”的上下移動來實現堆棧區中對內存的申請和釋放.堆棧指針若向下移動,則分配新的內存;若向上移動,則釋放那些內存。這是一種快速有效的分配存儲方法,速度僅次于寄存器.

創建程序時候,JAVA編譯器必須知道存儲在堆棧內所有數據的確切大小和生命周期,因為它必須生成相應的代碼,以便上下移動堆棧指針。這一約束限制了程序的靈活性,所以雖然某些JAVA數據存儲在堆棧中——特別是對象引用,但是JAVA對象不存儲其中.

特點:存放基本類型的變量數據和對象,數組的引用,但對象本身不存放在棧中,而是存放在堆(new 出來的對象)或者常量池中(字符串常量對象存放在常量池中).
@Test public void stack(String msg){ //調用方法是在棧內存中為參數msg分配存儲空間,方法結束自動釋放。 int count=0; //count是方法中的局部變量,存儲在棧內存中(基于效率的考慮, 基本類型數據的引用和值都存放在棧內存中),方法結束時候,釋放內存 LoginPResenterTest presenterTest=new LoginPresenterTest();//局部變量是復雜數據類型LoginPresenterTest,對象的引用presenterTest存放在棧內存中,而對象的創建發生在堆內存中. }

堆區

跟堆棧區一樣也存在于RAM中,用于存放所有的JAVA對象。堆不同于堆棧的好處是:編譯器不需要知道要從堆里分配多少存儲區域,也不必知道存儲的數據在堆里存活多長時間。因此,在堆里分配存儲有很大的靈活性。當你需要創建一個對象的時候,只需要new寫一行簡單的代碼,當執行這行代碼時,會自動在堆里進行存儲分配。當然,為這種靈活性必須要付出相應的代碼。用堆進行存儲分配比用堆棧進行存儲存儲需要更多的時間.

特點:存放所有new出來的對象,而針對堆中對象內存的回收依賴于GC.

靜態存儲區

存儲用static修飾的成員變量或方法.雖然static關鍵字可以用來標識一個對象是靜態的,但JAVA對象本身不會被存放在靜態存儲空間里,而是存儲在堆內存區.

特點:存放static修飾的靜態成員(方法或變量)

常量存儲區

常量(字符串常量和基本類型常量)通常直接存儲在程序代碼內部(常量池)。這樣做是安全的,因為它們的值在初始化時就已經被確定,并不會被改變。常量池在java用于保存在編譯期已確定的,已編譯的class文件中的一份數據。它包括了關于類,方法,接口等中的常量,也包括字符串常量,如String s = “abc”這種字面量方式.

特點:存放字符串常量和基本類型常量(public static final).

非RAM數據存儲區

如果數據完全存活于程序之外,那么它可以不受程序的任何控制,在程序沒有運行時也可以存在.

特點:硬盤等永久存儲空間.

堆與堆棧的關系:

這是一個關于堆與棧關系的引用說明

堆:堆是heap,是所謂的動態內存,其中的內存在不需要時可以回收,以分配給新的內存請求,其內存中的數據是無序的,即先分配的和隨后分配的內存并沒有什么必然的位置關系,釋放時也可以沒有先后順序。一般由使用者自由分配,在C語言中malloc分配的就是堆,需要手動釋放。 堆棧:就是stack。實際上是只有一個出入口的隊列,即后進先出(frist in , last out),先分配的內存必定后釋放。一般由,由系統自動分配,存放函數的參數值,局部變量等,自動清除。 還有,堆是全局的,堆棧是每個函數進入的時候分一小塊,函數返回的時候就釋放了,靜態和全局變量,new得到的變量,都放在堆中,局部變量放在堆棧中,所以函數返回,局部變量就全沒了。 JAVA中的基本類型,其實需要特殊對待。因為,在JAVA中,通過new創建的對象存儲在“堆”中,所以用new 創建一個小的、簡單的變量,如基本類型等,往往不是很有效。因此,在JAVA中,對于這些類型,采用了與C、C++相同的方法。也就是說,不用new 來創建,而是創建一個并非是“引用”的“自動”變量。這個變量擁有它的“值”,并置于堆棧中,因此更高效。 實際上類的實例方法在內存中是只有一份,不過肯定不會是第一個對象中,如果是第一個對象的話,那么當第一個對象被銷毀的時候,那么后面的對象就永遠無法調用了。 類的實例方法存在一個專門的區叫方法區(method area),事實上類剛裝載的時候就被裝載好了,不過它們在”睡眠”,只是這些方法必須當有對象產生的時候才會”蘇醒”.(比如,一個輸出類的成員變量的方法,如果連對象都沒有,何來的輸出成員變量).所以,方法在裝載的時候就有了,但是不可用,因為它沒有指象任何一個對象. 而靜態的又不一樣了,靜態的東西存在靜態存儲(static storage)區,他們和類是一個等級的,就是說只要類被裝載,它們就可以直接用.(用類名來調用).他們不依賴與任何對象,所以也不能輸出任何對象的成員屬性.(除非成員屬性也是靜態的). 每個對象在new的時候都會在堆區中開辟內存,用來保存對象的屬性和方法.(實際上方法保存的只是方法區的引用,如果保存的是方法本身,那么試想一下,有多少個對象就得有多少個方法,那么又和第一點中”實例方法在內存中只有一份拷貝”相矛盾了)。


棧內存中存儲的數據可以實現數據共享

假設我們定義了兩個局部變量(注意局部變量和方法形參才保存在棧中,成員變量是保存在堆中,不要混淆了) int s1=20;int s2=20;編譯器工作流程如下:

在棧中申請一個名為”s1”的存儲空間,然后查看棧中是否存放著一個”20”的值;如果棧中不存在”20”的值,就向棧中添加一個”20”的值,然后讓s1等于這個值.如果棧中存在”20”的值,就讓s1等于這個值而不用在棧中重新加入一個”20”的值.完成了對s1的數據分配后,由于s2=20,所以就不用再為s2在棧中重新分配”20”這個值了,這樣就實現了數據共享,節省了內存空間.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99精品视频一区97| 日本精品视频网站| 精品国内自产拍在线观看| 欧美与黑人午夜性猛交久久久| 国产在线a不卡| 激情亚洲一区二区三区四区| 亚洲国产精品悠悠久久琪琪| 亚洲最大的成人网| 麻豆国产va免费精品高清在线| 91大神在线播放精品| 久久国内精品一国内精品| 国产精品高潮呻吟久久av无限| 久久电影一区二区| 国产精品久久久久秋霞鲁丝| 日韩小视频在线观看| 久久久久久久久久久免费| 国产精品亚洲аv天堂网| 日韩av在线一区| 这里只有精品视频在线| 日韩美女免费观看| 久久精品99国产精品酒店日本| 欧美性极品xxxx娇小| 国产一区二区在线免费视频| 日韩一区二区精品视频| 亚洲桃花岛网站| 影音先锋日韩有码| 久久激情视频免费观看| 国产福利成人在线| 亚洲成人三级在线| 国产成人亚洲精品| 91日本视频在线| 欧美亚洲国产日韩2020| 精品视频在线播放色网色视频| 欧美在线视频免费观看| 午夜精品视频在线| 国产精品福利无圣光在线一区| 亚洲二区在线播放视频| 97视频在线观看播放| 午夜精品久久久久久久99热浪潮| 欧美成人四级hd版| 两个人的视频www国产精品| 97香蕉久久超级碰碰高清版| 国产专区欧美专区| 国产成人久久精品| 欧美综合国产精品久久丁香| 精品亚洲国产视频| 国产午夜一区二区| 久久91亚洲人成电影网站| 亚洲影院高清在线| 久久久久日韩精品久久久男男| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产在线精品播放| 久久中文字幕在线| 91日本在线观看| 深夜福利一区二区| 98精品国产自产在线观看| 青青a在线精品免费观看| 亚洲欧美中文在线视频| 伊人伊成久久人综合网站| 日韩在线高清视频| 久久亚洲影音av资源网| 欧美裸体xxxx| 97超级碰碰人国产在线观看| 91精品国产乱码久久久久久久久| 最近日韩中文字幕中文| 久久久精品久久| 亚洲人成电影在线| 亚洲视频国产视频| 久久影视电视剧免费网站| 亚洲激情成人网| 日韩资源在线观看| 日本一区二三区好的精华液| 国产一区视频在线| 欧美激情一区二区三区成人| 麻豆国产精品va在线观看不卡| 欧美一区二区三区图| 亚洲视频999| 亚洲午夜久久久影院| 亚洲午夜av久久乱码| 午夜剧场成人观在线视频免费观看| 91精品久久久久久久久久入口| 国产精品最新在线观看| 亚洲精品成人av| 77777少妇光屁股久久一区| 国产精品一区二区三区成人| 欧美激情中文字幕在线| 欧美刺激性大交免费视频| 色多多国产成人永久免费网站| 欧美精品性视频| 成人亚洲激情网| 亚洲天堂一区二区三区| 久久亚洲精品小早川怜子66| 992tv成人免费影院| 亚洲精品第一国产综合精品| 热re99久久精品国产66热| 成人午夜在线视频一区| 国产精品678| 色狠狠久久aa北条麻妃| 久久91精品国产91久久跳| 成人黄色免费在线观看| 91精品久久久久久| 亚洲精品小视频| 国产精品久久一区| 日韩精品中文字幕在线| 欧美电影免费观看| 成人激情视频免费在线| 一区二区在线视频| 亚洲精选在线观看| 91超碰caoporn97人人| 亚洲性av网站| 粉嫩老牛aⅴ一区二区三区| 国产精品高潮呻吟视频| 亚洲欧美日韩第一区| 国产精品久久久久久久久影视| 97精品国产97久久久久久| 国产精品亚洲综合天堂夜夜| 久久精品一区中文字幕| 日韩www在线| xvideos亚洲人网站| 国产在线视频一区| 奇米一区二区三区四区久久| 国产欧美日韩丝袜精品一区| 亚洲精选中文字幕| 九九热这里只有精品免费看| 亚洲国产欧美一区二区三区同亚洲| 国产97色在线| 欧美激情久久久| 亚洲人精品午夜在线观看| 欧美国产精品va在线观看| 日本a级片电影一区二区| 亚洲美女免费精品视频在线观看| 日韩av不卡电影| 亚洲天堂日韩电影| 在线播放国产精品| 91久久精品国产91久久性色| 中文字幕亚洲一区二区三区| 欧美成人免费全部| 亚洲美女精品成人在线视频| 91沈先生作品| 久久综合伊人77777尤物| 久久久久久久999| 国产成人激情小视频| 久久精视频免费在线久久完整在线看| 欧美性开放视频| 在线性视频日韩欧美| 日韩成人小视频| 亚洲一区二区三区777| 久久九九国产精品怡红院| www日韩欧美| 91亚洲永久免费精品| 中文字幕久热精品在线视频| 欧美中文字幕精品| 欧美一区二区三区免费视| 欧美成人国产va精品日本一级| 91精品视频观看| 欧美日韩国产精品| 精品偷拍各种wc美女嘘嘘| 日韩性生活视频| 久99久在线视频| 国产精品久久久久久婷婷天堂| 亚洲自拍偷拍网址| www.日韩.com| 日本中文字幕久久看| 91视频国产精品|