《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 一種針對Java中字符串的內存管理方案
一種針對Java中字符串的內存管理方案
來源:微型機與應用2011年第17期
彭 文
(中國科學技術大學 計算機科學與技術學院,安徽 合肥 230027)
摘要: 提出一種針對Java中字符串的內存管理方案。該方案分析了字符串操作接口的行為特征,利用編譯時指令插樁技術在字符串操作接口調用點插入回收指令,以主動回收無用字符串占用的堆空間,可以有效提高活躍堆空間的利用率,同時減輕垃圾收集的負擔,從而達到改善Java虛擬機性能的效果。
Abstract:
Key words :

摘  要: 提出一種針對Java中字符串的內存管理方案。該方案分析了字符串操作接口的行為特征,利用編譯時指令插樁技術在字符串操作接口調用點插入回收指令,以主動回收無用字符串占用的堆空間,可以有效提高活躍堆空間的利用率,同時減輕垃圾收集的負擔,從而達到改善Java虛擬機性能的效果。
關鍵詞: Java字符串;操作接口;指令插樁;內存管理

 Java[1]語言為字符串操作提供了豐富的支持,它將字符串封裝在三個類中并提供多種字符串操作接口。在Java應用程序中,由于對字符串的使用量比較高,從而使得其需要消耗較大的堆空間。例如在J2EE應用服務器運行過程中,約40%的活躍堆空間被用來保存字符串數據[2]。
 通過對Java中字符串操作接口的分析可以發現,隨著這些操作的運行會產生較多的無用字符串,它們不再被Java類封裝并且也不被任何變量引用。這些無用字符串數據將一直停留在活躍堆中,直到Java虛擬機啟動垃圾收集將其回收。而由于字符串數據具有單個對象占用空間較小但總體數量很大的特征,大量的無用字符串數據不僅會影響堆空間的利用率,并且對Java虛擬機垃圾收集的性能有較大影響。
 當前對Java中字符串的內存管理優化方案主要關注于字符串的使用效率上,如消除常量重復、延遲分配等技術[2],通過修改Java虛擬機對字符串分配回收的支持來提高堆中字符串的使用效率。然而這些方案無法處理堆中已經成為無用字符串的數據,只能等待垃圾收集來處理。
 近期編譯時的獨立對象回收策略[3]則專注于在編譯階段對應用程序做分析并插入回收指令以回收無用對象空間,但是該方案對Java庫函數只做保守分析從而無法回收這些無用字符串。為此,本文從對字符串操作接口的分析出發,識別各類操作對字符串的改變情況以利用獨立對象回收策略中的指令插樁技術來主動回收無用字符串對象,以提高堆空間的利用率、減低垃圾回收的負擔、改善Java虛擬機的性能。
1 Java中字符串的支持與分析
1.1 Java中字符串的支持

 Java語言將字符串的表示和操作都封裝在StringBuilder、StringBuffer和String三個類中。其中前兩個類指向的字符串是可變的,String類指向的字符串是不變的。這三個類的內部結構基本上一致,以StringBuilder為例,StringBuilder在Java中的結構如圖1所示。

 從圖1可以看出,字符串數據由StringBuilder對象指向的value域保存,在內存空間上反映為兩個對象:StringBuilder對象通過value域指向字符串對象。由于該類提供常用的可變字符串操作接口且相對另一個類StringBuffer具有較高的執行效率,對字符串數據的操作在Java虛擬機中一般會將其轉換為StringBuilder對象再做處理。下面以一個語句示例來說明這一點:
 String s=new String(‘aa’+’bb’+’cc’);
 該語句的語義是將三個字符串連接在一起并生成一個String對象,在Java語言的源程序級別上不會出現StringBuilder對象,但是經過編譯器優化之后,這條語句實際被翻譯為下面的字節碼形式(為簡化描述,本文以源語言來表示字節碼的操作):
 StringBuilder t=new StringBuilder(‘aa’);
 t.append(‘bb’);
 t.append(‘cc’);
 String s=t.toString();
 即Java編譯器會首先創建一個StringBuilder對象,完成字符串的連接工作之后再將其轉變為String對象。由于類似于這種情況的字符串操作較多地出現在輸出方法和字符串創建方法中,所以可推斷出StringBuilder有著較大的使用頻率,故將以其為代表分析其提供的接口對字符串的影響。
1.2 無用字符串的產生
 在上節的示例中,StringBuilder類提供的append()接口將會改變value域所指向的字符串,其做法是:新建長度為連接后字符串長度之和的字符數組,分段復制之后使其成為value域指向的新數組,而value域指向的原數組將被丟棄成為無用字符串。
 圖2為示例語句中append()接口引起的value域指向字符串變化圖。

 從圖2可以看出,在append()接口執行過后,對象的字符數組將指向新建的字符串’aabb’,原有字符串’aa’將不被任何變量指向而成為無用字符串。
 由于StringBuilder類的value域指向的字符串是可變的,在其提供的接口中存在大量類似append()可能對value域做出改變的接口,如insert()、replace()等。而在Java虛擬機對這些接口的調用頻率較多,表1是基準測試程序Jolden[4]的4個子程序中字符串操作接口調用次數以及可能對value域做出改變的接口調用次數對比。
 由表1可以看出,可能對value域做出改變的調用次數占字符串操作接口調用次數的22.6%~45.7%,占有不可忽視的比例。下面將深入分析這些可能改變value域的操作接口的具體實現。

 

 

1.3 字符串操作接口分析
 可能對value域做出改變的操作接口有一個共同點,即this對象不會發生變化,只是其value域指向一個新建的字符串。對字符串的操作接口做深入分析后可知,在append()等可能改變value域指向的操作接口的實現中,存在兩條改變分支:例如在接口append(s)中,如果s為null或者s的value域指向一個空字符串,則該接口不會改變this對象的value域指向;否則才會新建一個字符串以被this對象的value域指向。
 可以將這兩條改變分支表現為下面的形式:
 分支1:不做任何改變。
 分支2:新建字符串,使其被this對象的value域指向,原有字符串成為無用字符串。
 下面將給出根據本節的分析給出的無用字符串回收方案。
2 字符串的回收方案
 對無用字符串的回收存在兩個難點:(1)不可深入改變Java的庫函數實現。因為回收方案需要具有較強的通用性和靈活性;(2)由于操作接口具體實現中對value域的改變存在分支,并且只能在應用程序的運行階段判斷究竟執行的是哪個分支。
 本文采用獨立對象顯式回收策略中的指令插樁技術來解決上述兩個難題:在可能發生改變的字符串操作接口調用點處插入判定語句來對操作接口執行的分支做判斷,然后根據結果來實施字符串的回收方案。由于這些語句都插樁在用戶程序中,不會改變Java庫函數的實現,而且這些語句會隨著字符串操作接口的執行而執行,所收集的信息屬于運行時信息,故可以很好地判斷運行時分支的情況。
 由于兩條分支的不同之處表現為操作接口執行完畢之后,this對象的value域指向是否發生了變化,故可以采取接口調用前后value域比較的方式來判斷具體執行的分支。本文使用指令插樁技術,在Java虛擬機重編譯Java字節碼時對其做指令插樁工作,其處理流程為:
 (1)在Java虛擬機處理應用程序指令時判斷其是否為可能引起字符串變化的操作接口調用指令。
 (2)如果是則實施步驟(3)~(5)的指令插樁工作。
 (3)在調用指令之前插入this對象的value域引用保存指令。
 (4)在調用指令之后插入this對象的value域引用保存指令。
 (5)安插兩個引用的對比指令,如果不同,則插入回收指令以回收調用之前保存的引用;否則將不做處理。
 本方案用到了獨立對象回收技術中的回收指令,需要在Java虛擬機的內存管理模塊支持這個回收指令。由于對回收指令的支持對原有的分配和回收方案影響很小,故其實現較簡單并且具有一定的通用性。
 以圖3為例來說明本文的字符串回收方案。由于該方案處理的為Java字節碼,為了方便理解,將以實際代碼的形式體現:由圖3可看出,在調用點前后加入了value域引用保存指令記錄了調用點執行前后的value域的引用信息,然后將兩者做對比處理來判斷調用點是否對value域的引用做出了改變,如果引用信息有了變化,則之前的value域引用成為了無用字符串,可以插入回收指令將其回收。

 可以將該無用字符串回收方案應用到其他可能對對象內部value域指向的字符串做出改變的接口調用點,即可以在運行時回收由這些接口運行而出現的無用字符串數據。
3 實驗結果及分析
 在Apache的開源Java SE(Standard Edition)平臺Harmony[5]上實現了針對字符串的回收方案,并做了相關的實驗測試。測試平臺的操作系統是Windows 7 Ultimate,CPU為Intel Pentium Dual E2200,主頻為2.2 GHz,內存為2 GB。測試用例為Jolden中的4個基準程序。
 在實現了無用字符串的顯式回收之后,可以在運行中主動回收一些無用字符串以提高活躍堆空間的利用率和降低Java虛擬機垃圾回收的開銷。表2給出了主動回收的無用字符串大小和總分配大小的比較情況。
由表2可以看出,本文的回收方案主動回收的無用字符串占應用程序總分配空間的5%~18%,對堆空間的利用率有較大的提升。對無用字符串的主動回收也帶來了Java虛擬機的性能提升,因為可以減輕垃圾收集的負擔。表3給出了實現無用字符串回收方案前后測試程序在Java虛擬機中的執行時間對比。

 由表3可以看出,經過對無用字符串的主動回收處理,Java虛擬機對應用程序的執行效率也有了改善,分別減少了1%~5%。這說明無用字符串的回收可以提升Java虛擬機的性能。


 本文提出一種對Java應用程序中無用字符串進行顯式回收的方案,以指令插樁的形式收集應用程序運行時信息并主動回收堆中無用字符串,以提高堆空間的利用率。實驗結果表明,該方案可以有效提高Java虛擬機的性能和Java應用程序的執行效率。
參考文獻
[1] The Java language specification. http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html. 2011.
[2] KAWACHIYA K, OGATA K, ONODERA T. 2008 Analysis and reduction of memory inefficiencies in Java strings[C]. In Proceedings of the 23rd ACM SIGPLAN Conference on Object-oriented Programming Systems Languages and Applications, Nashville, TN, USA, 2008:385-402.
[3] SAMUEL Z, GUYER F M: A static analysis for automatic individual object reclamation[C]. Proceedings of the 2006 ACM SIGPLAN Conference on programming language design and implementation, 2006: 264-375.
[4] CAHOON B, MCKINLEY K S. Jolden Benchmarks [CP/DK]. ftp://ftp.cs.umass.edu/pub/osl/benchmarks/jolden.tar.gz.2002.
[5] Apache software foundation. Harmony-Open Source Java SE implementation.http://harmony.apache.org/index.html.2003-2009.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲无线一线二线三线区别av| 欧美高清在线一区二区| 国产日韩欧美三区| 国际精品欧美精品| 国产精品日本精品| 欧美色偷偷大香| 激情小说亚洲一区| 91久久国产综合久久| 亚洲欧美视频在线观看视频| 国产欧美一区二区三区久久| 亚洲国产中文字幕在线观看| 国产视频精品网| 国内综合精品午夜久久资源| 一二美女精品欧洲| 美女免费视频一区| 亚洲视频福利| 久久av资源网站| 免费不卡亚洲欧美| 香蕉久久夜色精品国产| 在线看视频不卡| 欧美精品一区在线| 久久久久国产精品午夜一区| 亚洲国产成人av| 欧美福利网址| 欧美三级黄美女| 亚洲欧洲一区二区在线播放| 欧美日韩国产综合视频在线观看中文| 欧美影院视频| 一区二区三区导航| 欧美视频中文字幕在线| 免费观看欧美在线视频的网站| 夜夜嗨一区二区| 欧美国产综合| 美女尤物久久精品| 欧美一区二区三区免费在线看| 久久精品久久99精品久久| 欧美伊人精品成人久久综合97| 国产精品尤物福利片在线观看| 能在线观看的日韩av| 欧美亚洲一级| 亚洲视频一区二区在线观看| 欧美成人性网| 欧美在线视频在线播放完整版免费观看| 久久久99久久精品女同性| 欧美与黑人午夜性猛交久久久| 在线观看不卡av| 国产欧美精品va在线观看| 亚洲字幕一区二区| 国内久久婷婷综合| 国产精品欧美经典| 欧美人与性动交a欧美精品| 欧美激情综合五月色丁香| 亚洲激情国产精品| 亚洲高清在线精品| 欧美日韩精品一区二区三区四区| 一区二区福利| 国产精品一区=区| 免费观看在线综合色| 99国产精品久久| 欧美日韩国产在线| 国产精品天天摸av网| 欧美a级一区| 久久精品成人| 欧美高清视频一区二区| 午夜一区二区三区不卡视频| 一区二区欧美国产| 国产精品毛片高清在线完整版| 免费一级欧美片在线播放| 西西裸体人体做爰大胆久久久| 欧美激情一区二区三区全黄| 欧美亚韩一区| 激情综合五月天| 亚洲日韩中文字幕在线播放| 亚洲一区二区三区四区五区黄| 曰韩精品一区二区| 久久精品视频99| 欧美精品情趣视频| 久久福利资源站| 欧美视频在线观看免费| 国产精品大片免费观看| 一区二区国产在线观看| 在线观看日韩av先锋影音电影院| 日韩天天综合| 国产欧美一区二区精品忘忧草| 国产亚洲欧美一区二区| 亚洲丝袜av一区| 欧美高清一区二区| 亚洲最新色图| 日韩一区二区精品在线观看| 亚洲欧美日韩天堂一区二区| 久久中文字幕导航| 激情成人av在线| 91久久嫩草影院一区二区| 欧美日韩三级视频| 欧美顶级艳妇交换群宴| 亚洲激情第一页| 国产精品三上| 国产亚洲制服色| 亚洲午夜在线视频| 免费欧美网站| 久久综合九色九九| 国产精品视频专区| 亚洲一区二区在线| 国产欧美日韩综合| 国产一区二区三区四区老人| 久久精品亚洲乱码伦伦中文| 亚洲欧美激情视频在线观看一区二区三区| 午夜精彩视频在线观看不卡| 久久综合网色—综合色88| 国产性猛交xxxx免费看久久| 国产欧美91| 亚洲精品视频免费在线观看| 久久久999精品| 日韩视频免费在线观看| 欧美日韩精品免费观看视频| 韩国精品久久久999| 久久国产精品网站| 中日韩高清电影网| 久久免费少妇高潮久久精品99| 亚洲人成在线播放| 欧美特黄a级高清免费大片a级| 久久亚洲私人国产精品va媚药| 一本一本久久| 久久国产精品第一页| 国产精品久久网| 亚洲欧洲精品一区二区| 日韩视频在线观看国产| 久久九九久精品国产免费直播| 亚洲激情小视频| 国产精品试看| 亚洲一区二区在线免费观看视频| 国产亚洲日本欧美韩国| 国内精品国语自产拍在线观看| 中文亚洲字幕| 日韩亚洲欧美一区| 午夜精品偷拍| 香蕉久久久久久久av网站| 久久久999成人| 亚洲第一色在线| 国产精品久久久久久久久久免费| 久久久久久穴| 99re在线精品| 美女黄毛**国产精品啪啪| 亚洲大片在线| 牛人盗摄一区二区三区视频| 欧美一级成年大片在线观看| 猛干欧美女孩| 欧美日韩精品免费观看视频完整| 国产一区二区三区精品久久久| 亚洲另类黄色| 欧美成人精品在线播放| 欧美人妖另类| 免费看成人av| 欧美影院成人| 亚洲每日更新| 老鸭窝毛片一区二区三区| 久久精品国产欧美激情| 精品av久久久久电影| 欧美激情女人20p| 久久久水蜜桃| 欧美经典一区二区| 亚洲香蕉在线观看| 亚洲视频在线播放| 欧美日韩精品一区二区在线播放| 伊大人香蕉综合8在线视| 亚洲一区二区三区中文字幕| 亚洲欧洲在线看| 亚洲国产欧美日韩另类综合| 午夜精品久久久久久久99水蜜桃| 欧美成人精品高清在线播放| 亚洲大胆女人| 久久精品电影| 欧美午夜理伦三级在线观看| 亚洲无线视频| 亚洲中无吗在线| 一区二区三区欧美激情| 欧美色综合网| 牛夜精品久久久久久久99黑人| 99视频精品全部免费在线| 欧美日韩1080p| 国产精品久久中文| 欧美日韩伦理在线免费| 91久久久久| 久久久久一本一区二区青青蜜月| 一区二区亚洲欧洲国产日韩| 国产精品无码专区在线观看| 国产精品swag| 一区二区三区四区精品| 怡红院精品视频| 亚洲制服欧美中文字幕中文字幕| 亚洲国产精品国自产拍av秋霞| 国产精品日本一区二区| 老司机精品久久| 一本色道久久综合精品竹菊| 国产精品女主播一区二区三区| 日韩一级成人av| 国产精品久久久爽爽爽麻豆色哟哟| 久久久女女女女999久久| 亚洲免费中文| 久久偷窥视频| 亚洲日本理论电影| 欧美日韩亚洲国产精品| 亚洲伊人色欲综合网| 欧美少妇一区二区| 欧美视频中文字幕在线| 欧美亚洲系列| 国产精品久久久99| 在线看欧美视频| 男人的天堂亚洲在线| 麻豆国产精品一区二区三区| 欧美精品在线一区二区| 久久欧美中文字幕| 中文在线资源观看网站视频免费不卡| 欧美日韩国产成人在线免费| av成人免费| 久久手机精品视频| 久久国内精品视频| 欧美日韩三级一区二区| 亚洲福利电影| 欧美高清你懂得| 欧美性理论片在线观看片免费| 欧美经典一区二区| 国产精品久线观看视频| 亚洲精品一区二区三区不| 欧美精品粉嫩高潮一区二区| 精品99一区二区| 影音先锋中文字幕一区| 欧美高潮视频| 9色porny自拍视频一区二区| 麻豆精品网站| 亚洲精品网站在线播放gif| 91久久精品国产91性色| 亚洲黄色免费电影| 欧美一区二区三区在线观看| 国产欧美69| 中文精品在线| 欧美一区二区三区久久精品茉莉花| 激情一区二区| 欧美一区二区观看视频| 国产精品99久久久久久人| 久久久久久噜噜噜久久久精品| 国产伦精品一区二区三区在线观看| 亚洲日本无吗高清不卡| 蜜桃av一区二区三区| 亚洲动漫精品| 在线精品视频一区二区三四| 欧美午夜精品久久久久免费视| 香蕉视频成人在线观看| 午夜宅男久久久| 韩国自拍一区| 欧美在线观看视频在线| 久久久爽爽爽美女图片| 国产精品专区h在线观看| 一区二区三区精品| 欧美不卡一卡二卡免费版| 欧美亚洲日本网站| 在线成人h网| 午夜亚洲性色视频| 怡红院精品视频在线观看极品| 国产精品porn| 欧美韩日高清| 欧美日韩三级电影在线| 国产精品视频一二| 一区二区高清视频在线观看| 午夜精品网站| 久久久久久久97| 国产精品久久国产三级国电话系列| 欧美日韩另类丝袜其他| 国产精品乱人伦一区二区| 国产美女精品人人做人人爽| 日韩亚洲欧美成人| 久久视频一区二区| 亚洲欧美日韩国产综合| 欧美三级第一页| 99视频热这里只有精品免费| 伊人精品视频| 久久视频这里只有精品| 日韩视频在线观看| 欧美精品一卡二卡| 亚洲二区视频| 国产精品高潮呻吟久久av无限| 亚洲福利在线看| 欧美精品久久久久久| 欧美在线观看视频| 久久aⅴ乱码一区二区三区| 亚洲国产日韩综合一区| 怡红院av一区二区三区| 久久天天躁夜夜躁狠狠躁2022| 国产色爱av资源综合区| 欧美午夜宅男影院| 久久亚洲综合色| 久久久噜噜噜久久中文字幕色伊伊| 亚洲欧洲在线免费| 欧美一区激情| 精品9999| 久热爱精品视频线路一| 99国产精品久久久久久久| 在线不卡中文字幕| 午夜精品一区二区三区在线| 国产日韩在线一区二区三区| 国产欧美一区二区三区在线看蜜臀| 午夜免费在线观看精品视频| 国产精品久在线观看| 亚洲电影免费观看高清完整版| 亚洲午夜成aⅴ人片| 亚洲精品乱码久久久久久| 国内精品久久久久久久97牛牛| 国产视频一区三区| 欧美屁股在线| 亚洲图片欧美午夜| 欧美激情综合在线| 国产精品igao视频网网址不卡日韩| 欧美精品一二三| 麻豆91精品| 欧美高清一区二区| 夜夜嗨av一区二区三区网页| 在线观看亚洲视频啊啊啊啊| 一区二区三区三区在线| 性欧美xxxx视频在线观看| 亚洲欧美美女| 亚洲欧美一区二区三区久久| 在线精品观看| 一区二区欧美激情| 在线观看欧美精品| 午夜精品福利电影| 中文日韩欧美| 欧美在线视频全部完| 亚洲婷婷综合色高清在线|