java數(shù)據(jù)類(lèi)型:基本數(shù)據(jù)類(lèi)型、引用數(shù)據(jù)類(lèi)型(三種其中一種:數(shù)組類(lèi)型)
java內(nèi)存結(jié)構(gòu):java在啟動(dòng)時(shí),一共在空間劃分了5片空間來(lái)進(jìn)行自己數(shù)據(jù)的存儲(chǔ)(棧內(nèi)存,堆內(nèi)存, 方法區(qū),本地方法區(qū),寄存器)
棧內(nèi)存:特點(diǎn)是數(shù)據(jù)使用完畢,會(huì)自動(dòng)釋放(凡是局部變量(定義在方法中的變量、定義在方法參數(shù)上 的變量、定義在for循環(huán)里面的變量)都在棧內(nèi)存中)
堆內(nèi)存:特點(diǎn)
1.是堆里面每一個(gè)實(shí)體都有一個(gè)存放位置,都有一個(gè)內(nèi)存地址值,凡是new出來(lái)的實(shí)體都在堆里面,堆里面存放的就是實(shí)體,實(shí)體包括數(shù)組和對(duì)象;
2.堆內(nèi)存中實(shí)體是用于封裝數(shù)據(jù)的,而堆內(nèi)存實(shí)體中的數(shù)據(jù)都有默認(rèn)初始化值(數(shù)組中數(shù)值類(lèi)為int型默認(rèn)0,double型默認(rèn)為0.0等)
3.實(shí)體不在被使用,會(huì)在不確定的時(shí)間內(nèi)被垃圾回收器回收(x = null,則代表x不再指向這個(gè) 數(shù)組,而是值為空,則x不知道了數(shù)組的地址,也就跟這數(shù)組沒(méi)有關(guān)系,而這數(shù)組就沒(méi)人使用了。則當(dāng)一個(gè)實(shí)體在堆內(nèi)存中沒(méi)有任何引用所使用的時(shí)候,java虛擬機(jī)就視他為垃圾。)
java垃圾回收機(jī)制:java語(yǔ)言本身成長(zhǎng)于c++,優(yōu)化了一些C++語(yǔ)言的特性; C++語(yǔ)言的特點(diǎn)在于,我們 寫(xiě) 的很多程序運(yùn)行的時(shí)候會(huì)在內(nèi)存中開(kāi)辟空間,當(dāng)內(nèi)存中的實(shí)體越來(lái)越多的時(shí)候,比較占用內(nèi)存空間,有些實(shí)體不用了需要清除,C++的做法是由程序員手動(dòng)調(diào)用一個(gè)功能,將內(nèi)存中的這部分?jǐn)?shù)據(jù)清除掉;而java只要實(shí)體或?qū)ο笤诙阎凶兂衫?strong>java虛擬機(jī)會(huì)自動(dòng)啟用垃圾回收機(jī)制,在不確定的時(shí)間內(nèi)將垃圾清除掉。
舉例:int[] x = new int[3];在內(nèi)存中是這樣的,首先是在棧內(nèi)存中定義了一個(gè)x,在堆內(nèi)存中分配了三個(gè)格子,每個(gè)都有編號(hào),每個(gè)格子存放數(shù)組對(duì)應(yīng)值(實(shí)體)。堆中每個(gè)實(shí)體,都有個(gè)存放位置(地址),該數(shù)組的起始地址(假設(shè)0x0079),標(biāo)識(shí)數(shù)組在堆內(nèi)存存放的首地址,將該地址值賦給x,則稱(chēng)x指向了這個(gè)數(shù)組或者叫做x引用了這個(gè)數(shù)組(引用數(shù)據(jù)類(lèi)型的由來(lái))。