在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

實(shí)例解析Java字符串內(nèi)存管理方法

大小:0.3 MB 人氣: 2017-10-27 需要積分:1
Java[1]語(yǔ)言為字符串操作提供了豐富的支持,它將字符串封裝在三個(gè)類(lèi)中并提供多種字符串操作接口。在Java應(yīng)用程序中,由于對(duì)字符串的使用量比較高,從而使得其需要消耗較大的堆空間。例如在J2EE應(yīng)用服務(wù)器運(yùn)行過(guò)程中,約40%的活躍堆空間被用來(lái)保存字符串?dāng)?shù)據(jù)[2]。
  通過(guò)對(duì)Java中字符串操作接口的分析可以發(fā)現(xiàn),隨著這些操作的運(yùn)行會(huì)產(chǎn)生較多的無(wú)用字符串,它們不再被Java類(lèi)封裝并且也不被任何變量引用。這些無(wú)用字符串?dāng)?shù)據(jù)將一直停留在活躍堆中,直到Java虛擬機(jī)啟動(dòng)垃圾收集將其回收。而由于字符串?dāng)?shù)據(jù)具有單個(gè)對(duì)象占用空間較小但總體數(shù)量很大的特征,大量的無(wú)用字符串?dāng)?shù)據(jù)不僅會(huì)影響堆空間的利用率,并且對(duì)Java虛擬機(jī)垃圾收集的性能有較大影響。
  當(dāng)前對(duì)Java中字符串的內(nèi)存管理優(yōu)化方案主要關(guān)注于字符串的使用效率上,如消除常量重復(fù)、延遲分配等技術(shù)[2],通過(guò)修改Java虛擬機(jī)對(duì)字符串分配回收的支持來(lái)提高堆中字符串的使用效率。然而這些方案無(wú)法處理堆中已經(jīng)成為無(wú)用字符串的數(shù)據(jù),只能等待垃圾收集來(lái)處理。
  近期編譯時(shí)的獨(dú)立對(duì)象回收策略[3]則專(zhuān)注于在編譯階段對(duì)應(yīng)用程序做分析并插入回收指令以回收無(wú)用對(duì)象空間,但是該方案對(duì)Java庫(kù)函數(shù)只做保守分析從而無(wú)法回收這些無(wú)用字符串。為此,本文從對(duì)字符串操作接口的分析出發(fā),識(shí)別各類(lèi)操作對(duì)字符串的改變情況以利用獨(dú)立對(duì)象回收策略中的指令插樁技術(shù)來(lái)主動(dòng)回收無(wú)用字符串對(duì)象,以提高堆空間的利用率、減低垃圾回收的負(fù)擔(dān)、改善Java虛擬機(jī)的性能。
  1 Java中字符串的支持與分析
  1.1 Java中字符串的支持
  Java語(yǔ)言將字符串的表示和操作都封裝在StringBuilder、StringBuffer和String三個(gè)類(lèi)中。其中前兩個(gè)類(lèi)指向的字符串是可變的,String類(lèi)指向的字符串是不變的。這三個(gè)類(lèi)的內(nèi)部結(jié)構(gòu)基本上一致,以StringBuilder為例,StringBuilder在Java中的結(jié)構(gòu)如圖1所示。
  實(shí)例解析Java字符串內(nèi)存管理方法
  從圖1可以看出,字符串?dāng)?shù)據(jù)由StringBuilder對(duì)象指向的value域保存,在內(nèi)存空間上反映為兩個(gè)對(duì)象:StringBuilder對(duì)象通過(guò)value域指向字符串對(duì)象。由于該類(lèi)提供常用的可變字符串操作接口且相對(duì)另一個(gè)類(lèi)StringBuffer具有較高的執(zhí)行效率,對(duì)字符串?dāng)?shù)據(jù)的操作在Java虛擬機(jī)中一般會(huì)將其轉(zhuǎn)換為StringBuilder對(duì)象再做處理。下面以一個(gè)語(yǔ)句示例來(lái)說(shuō)明這一點(diǎn):
  String s=new String(‘a(chǎn)a’+’bb’+’cc’);
  該語(yǔ)句的語(yǔ)義是將三個(gè)字符串連接在一起并生成一個(gè)String對(duì)象,在Java語(yǔ)言的源程序級(jí)別上不會(huì)出現(xiàn)StringBuilder對(duì)象,但是經(jīng)過(guò)編譯器優(yōu)化之后,這條語(yǔ)句實(shí)際被翻譯為下面的字節(jié)碼形式(為簡(jiǎn)化描述,本文以源語(yǔ)言來(lái)表示字節(jié)碼的操作):
  StringBuilder t=new StringBuilder(‘a(chǎn)a’);
  t.append(‘bb’);
  t.append(‘cc’);
  String s=t.toString();
  即Java編譯器會(huì)首先創(chuàng)建一個(gè)StringBuilder對(duì)象,完成字符串的連接工作之后再將其轉(zhuǎn)變?yōu)镾tring對(duì)象。由于類(lèi)似于這種情況的字符串操作較多地出現(xiàn)在輸出方法和字符串創(chuàng)建方法中,所以可推斷出StringBuilder有著較大的使用頻率,故將以其為代表分析其提供的接口對(duì)字符串的影響。
  1.2 無(wú)用字符串的產(chǎn)生
  在上節(jié)的示例中,StringBuilder類(lèi)提供的append()接口將會(huì)改變value域所指向的字符串,其做法是:新建長(zhǎng)度為連接后字符串長(zhǎng)度之和的字符數(shù)組,分段復(fù)制之后使其成為value域指向的新數(shù)組,而value域指向的原數(shù)組將被丟棄成為無(wú)用字符串。
  圖2為示例語(yǔ)句中append()接口引起的value域指向字符串變化圖。
  實(shí)例解析Java字符串內(nèi)存管理方法
  從圖2可以看出,在append()接口執(zhí)行過(guò)后,對(duì)象的字符數(shù)組將指向新建的字符串’aabb’,原有字符串’aa’將不被任何變量指向而成為無(wú)用字符串。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 亚洲狠狠婷婷综合久久久图片 | 福利视频999 | 一级片在线免费观看 | 黄篇网站在线观看 | 日毛片| 欧美一级一一特黄 | 好大好猛好爽好深视频免费 | 4hu影院最新地址www | 亚洲一在线 | 久久免费看 | 一级做a爰片久久毛片一 | 中文字幕在线视频第一页 | 国产美女动态免费视频 | 亚洲区一二三四区2021 | 日日操免费视频 | 视频网站黄色 | 欧美福利在线播放 | 精品精品国产自在久久高清 | 影音先锋ady69色资源网站 | 国产香蕉在线精彩视频 | 亚洲国产人成在线观看 | 国产伦精品一区二区三区四区 | 亚洲国产日韩欧美在线as乱码 | 97人洗澡人人澡人人爽 | 激情网网站 | 成人av在线播放 | 黄a级免费 | 狠狠干网站| 亚洲欧美日韩在线精品2021 | 亚洲 午夜在线一区 | 免费一级毛毛片 | 国产精品区在线12p 国产精品任我爽爆在线播放6080 | 四虎4545www国产精品 | 久久久久国产精品免费网站 | 又粗又大的机巴好爽欧美 | 李丽莎尤物福利视频 | 日本拍拍拍 | 色内内免费视频播放 | 欧美一区二区视频 | xxxx性bbbb| 四虎影视最新网址 |