freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java內(nèi)存堆和棧深入-wenkub

2022-09-15 16:23:05 本頁(yè)面
 

【正文】 來(lái),除靜態(tài)存儲(chǔ)分配之外,都顯得很呆板和難以理解,下面撇開(kāi)靜態(tài)存儲(chǔ)分配,集中比較堆和棧:從堆和棧的功能和作用來(lái)通俗的比較,堆主要用來(lái)存放對(duì)象的,:在編程中,例如C/C++中,所有的方法調(diào)用都是通過(guò)棧來(lái)進(jìn)行的,所有的局部變量,形式參數(shù)都是從棧中分配內(nèi)存空間的。擔(dān)心陷阱!對(duì)象可能并沒(méi)有被創(chuàng)建!而可能只是指向一個(gè)先前已經(jīng)創(chuàng)建的對(duì)象。每一次生成一個(gè)。String str1 =new String (abc)。String str1 = abc。兩種的形式來(lái)創(chuàng)建,第一種是用new()來(lái)新建對(duì)象的,它會(huì)在存放于堆中。而一個(gè)對(duì)象引用變量修改了這個(gè)對(duì)象的內(nèi)部狀態(tài),會(huì)影響到另一個(gè)對(duì)象引用變量。這樣,就出現(xiàn)了a與b同時(shí)均指向3的情況。棧有一個(gè)很重要的特殊性,就是存在棧中的數(shù)據(jù)可以共享。但缺點(diǎn)是,由于要在運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存,存取速度較慢。與C++不同,Java自動(dòng)管理?xiàng):投?,程序員不能直接地設(shè)置?;蚨选T诙阎挟a(chǎn)生了一個(gè)數(shù)組或?qū)ο蠛?,還可以在棧中定義一個(gè)特殊的變量,讓棧中這個(gè)變量的取值等于數(shù)組或?qū)ο笤诙褍?nèi)存中的首地址,棧中的這個(gè)變量就成了數(shù)組或?qū)ο蟮囊米兞?。在函?shù)中定義的一些基本類型的變量和對(duì)象的引用變量都在函數(shù)的棧內(nèi)存中分配。String s4 = s1 + s2。(str1==str2)。String str2 = abc。(str1==str2)。 // false問(wèn)題三:String s1 = ja。(s3 == s4)。當(dāng)在一段代碼塊定義一個(gè)變量時(shí),Java就在棧中為這個(gè)變量分配內(nèi)存空間,當(dāng)超過(guò)變量的作用域后,Java會(huì)自動(dòng)釋放掉為該變量所分配的內(nèi)存空間,該內(nèi)存空間可以立即被另作他用。引用變量就相當(dāng)于是為數(shù)組或?qū)ο笃鸬囊粋€(gè)名稱,以后就可以在程序中使用棧中的引用變量來(lái)訪問(wèn)堆中的數(shù)組或?qū)ο?。Java的堆是一個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū),類的(對(duì)象從中分配空間。棧的優(yōu)勢(shì)是,存取速度比堆要快,僅次于寄存器,棧數(shù)據(jù)可以共享。假設(shè)我們同時(shí)定義:int a = 3。這時(shí),如果再令a=4;那么編譯器會(huì)重新搜索棧中是否有4值,如果沒(méi)有,則將4存放進(jìn)來(lái),并令a指向4;如果已經(jīng)有了,則直接將a指向這個(gè)地址。String是一個(gè)特殊的包裝類數(shù)據(jù)。每調(diào)用一次就會(huì)創(chuàng)建一個(gè)新的對(duì)象。String str2 = abc。String str2 =new String (abc)。因此用第一種方式創(chuàng)建多個(gè)”abc”字符串,在內(nèi)存中其實(shí)只存在一個(gè)對(duì)象而已. 這種寫法有利與節(jié)省內(nèi)存空間. 同時(shí)它可以在一定程度上提高程序的運(yùn)行速度,因?yàn)镴VM會(huì)自動(dòng)根據(jù)棧中數(shù)據(jù)的實(shí)際情況來(lái)決定是否有必要?jiǎng)?chuàng)建新對(duì)象。只有通過(guò)new()方法才能保證每次都創(chuàng)建一個(gè)新的對(duì)象。實(shí)際上也不是什么分配,只是從棧頂向上用就行,就好像工廠中的傳送帶(conveyor belt)一樣,Stack Pointer會(huì)自動(dòng)指引你到放東西的位置,,, ,在分配的時(shí)候,比如為一個(gè)即將要調(diào)用的程序模塊分配數(shù)據(jù)區(qū)時(shí),應(yīng)事先知道這個(gè)數(shù)據(jù)區(qū)的大小,也就說(shuō)是雖然分配是在程序運(yùn)行時(shí)進(jìn)行的,但是分配的大小多少是確定的,不變的,而這個(gè)大小多少是在編譯時(shí)確定的,不是在運(yùn)行時(shí).堆是應(yīng)用程序在運(yùn)行的時(shí)候請(qǐng)求操作系統(tǒng)分配給自己內(nèi)存,由于從操作系統(tǒng)管理的內(nèi)存分配,所以在分配和銷毀時(shí)都要占用時(shí)間,,編譯器不必知道要從堆里分配多少存儲(chǔ)空間,也不必知道存儲(chǔ)的數(shù)據(jù)要在堆里停留多長(zhǎng)的時(shí)間,因此,用堆保存數(shù)據(jù)時(shí)會(huì)得到更大的靈活性。JVM對(duì)堆棧只進(jìn)行兩種操作:以幀為單位的壓棧和出棧操作。每一個(gè)Java應(yīng)用都唯一對(duì)應(yīng)一個(gè)JVM實(shí)例,每一個(gè)實(shí)例唯一對(duì)應(yīng)一個(gè)堆。關(guān)于String對(duì)象的創(chuàng)建,兩種方式是不同的,第一種不用new的簡(jiǎn)單語(yǔ)法,即String s1=JAVA。這就是字符串的一次投入,終生回報(bào)的內(nèi)存機(jī)制,對(duì)字符串的比較帶來(lái)好處。堆的優(yōu)勢(shì)是可以動(dòng)態(tài)地分配內(nèi)存大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會(huì)自動(dòng)收走這些不再使用的數(shù)據(jù)。 出于追求速度的原因,就存在于棧中。即可以用String str = new String(abc)。但像String str = abc;這種場(chǎng)合下,其字符串值卻是保存了一個(gè)指向存在棧中數(shù)據(jù)的引用!用new()來(lái)新建對(duì)象的,都會(huì)在堆中創(chuàng)建,而且其字符串是單獨(dú)存值的,即使與棧中的數(shù)據(jù)相同,也不會(huì)與棧中的數(shù)據(jù)共享。既不在堆也不再棧中。byte,short,char,int,long,float,double,boolean return (this == obj)。你通過(guò)你重寫后的equals比較對(duì)象,結(jié)果是相等,但用hashCode值比較他們時(shí)是不相等的,所以,為了比較結(jié)果的一致性,需要重寫hashCode方法。 if (this == anObject) { //字符串的值,用字符數(shù)組表示 int j = 。 if (v1[i++] != v2[j++]) } } //字符串值相等則他們的hashCode值也相等,否則,不相等public int hashCode() { char val[] = value。 i++) {在多數(shù)情況 下,這兩個(gè)函數(shù)是不用考慮的,直接使用它們的默認(rèn)設(shè)計(jì)就可以了。其他情 況下,
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1