999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種針對Java中字符串的內存管理方案

2011-07-25 00:33:50彭文
網絡安全與數據管理 2011年17期
關鍵詞:指令

彭文

(中國科學技術大學 計算機科學與技術學院,安徽 合肥 230027)

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對象再做處理。下面以一個語句示例來說明這一點:

圖1 StringBuilder的內部結構

該語句的語義是將三個字符串連接在一起并生成一個String對象,在Java語言的源程序級別上不會出現StringBuilder對象,但是經過編譯器優化之后,這條語句實際被翻譯為下面的字節碼形式(為簡化描述,本文以源語言來表示字節碼的操作):

即Java編譯器會首先創建一個StringBuilder對象,完成字符串的連接工作之后再將其轉變為String對象。由于類似于這種情況的字符串操作較多地出現在輸出方法和字符串創建方法中,所以可推斷出StringBuilder有著較大的使用頻率,故將以其為代表分析其提供的接口對字符串的影響。

1.2 無用字符串的產生

在上節的示例中,StringBuilder類提供的append()接口將會改變value域所指向的字符串,其做法是:新建長度為連接后字符串長度之和的字符數組,分段復制之后使其成為value域指向的新數組,而value域指向的原數組將被丟棄成為無用字符串。

圖2為示例語句中append()接口引起的value域指向字符串變化圖。

圖2 append()對字符數組操作示例

從圖2可以看出,在append()接口執行過后,對象的字符數組將指向新建的字符串’aabb’,原有字符串’aa’將不被任何變量指向而成為無用字符串。

由于StringBuilder類的value域指向的字符串是可變的,在其提供的接口中存在大量類似append()可能對value域做出改變的接口,如 insert()、replace()等。而在Java虛擬機對這些接口的調用頻率較多,表1是基準測試程序Jolden[4]的4個子程序中字符串操作接口調用次數以及可能對value域做出改變的接口調用次數對比。

表1 字符串操作接口調用次數統計

由表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域引用成為了無用字符串,可以插入回收指令將其回收。

圖3 無用字符串回收示例

可以將該無用字符串回收方案應用到其他可能對對象內部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虛擬機中的執行時間對比。

表2 無用字符串主動回收統計

表3 無用字符串主動回收統計

由表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 Proceedingsofthe23rd ACM SIGPLAN Conferenceon 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.

猜你喜歡
指令
聽我指令:大催眠術
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
殺毒軟件中指令虛擬機的脆弱性分析
電信科學(2016年10期)2016-11-23 05:11:56
巧用G10指令實現橢圓輪廓零件倒圓角
時代農機(2015年3期)2015-11-14 01:14:29
中斷與跳轉操作對指令串的影響
科技傳播(2015年20期)2015-03-25 08:20:30
基于匯編指令分布的惡意代碼檢測算法研究
一種基于滑窗的余度指令判別算法
歐盟修訂電氣及電子設備等產品安全規定
家電科技(2014年5期)2014-04-16 03:11:28
MAC指令推動制冷劑行業發展
汽車零部件(2014年2期)2014-03-11 17:46:27
主站蜘蛛池模板: 四虎精品国产AV二区| 日韩视频免费| 538精品在线观看| 91av成人日本不卡三区| 天天色天天综合网| 亚洲精品在线观看91| 成人自拍视频在线观看| 成人在线天堂| 久久综合丝袜长腿丝袜| 国产成人综合网| 美女毛片在线| 国产精品国产三级国产专业不| 免费观看无遮挡www的小视频| 婷婷综合亚洲| 亚洲国产精品日韩欧美一区| 巨熟乳波霸若妻中文观看免费| 亚洲欧美人成电影在线观看| 中国毛片网| 欧美精品高清| 亚洲看片网| 久久精品无码专区免费| 美女一区二区在线观看| 国产办公室秘书无码精品| 91亚洲视频下载| 亚洲精品无码抽插日韩| 中文字幕丝袜一区二区| 超薄丝袜足j国产在线视频| 99人妻碰碰碰久久久久禁片| 亚卅精品无码久久毛片乌克兰 | 影音先锋亚洲无码| 国产粉嫩粉嫩的18在线播放91| 中文国产成人久久精品小说| 香蕉精品在线| 婷婷丁香色| 午夜国产在线观看| 538国产在线| 国产成人免费观看在线视频| 午夜不卡视频| 最新国产精品鲁鲁免费视频| 国产精品偷伦视频免费观看国产| 国产亚洲美日韩AV中文字幕无码成人 | 欧美精品v欧洲精品| 99手机在线视频| 国产精品久线在线观看| 亚洲大尺度在线| 真人高潮娇喘嗯啊在线观看| 五月天婷婷网亚洲综合在线| 福利一区在线| 久久精品国产999大香线焦| 2022精品国偷自产免费观看| 天天综合天天综合| 高清久久精品亚洲日韩Av| 99久久婷婷国产综合精| 激情無極限的亚洲一区免费| 四虎影视无码永久免费观看| 亚洲第一在线播放| 欧美性色综合网| 欧美高清三区| 亚洲欧美日韩中文字幕在线| h视频在线播放| 亚洲无码四虎黄色网站| 在线a视频免费观看| 日韩毛片免费视频| 国产精品久久久久久影院| 特级毛片8级毛片免费观看| 亚洲成人www| 亚洲无码电影| 日韩欧美中文| 色天天综合| 亚洲日韩精品无码专区| 97se亚洲综合在线天天| 亚洲,国产,日韩,综合一区 | 久久久久国产精品嫩草影院| 久久这里只有精品23| 久久99精品久久久久纯品| 久久semm亚洲国产| 亚洲国产成人综合精品2020 | 四虎永久免费地址| 中文字幕永久视频| 国产一级毛片高清完整视频版| 日本精品视频| 亚洲精品黄|