国产aaaa级全身裸体精油片_337p人体粉嫩久久久红粉影视_一区中文字幕在线观看_国产亚洲精品一区二区_欧美裸体男粗大1609_午夜亚洲激情电影av_黄色小说入口_日本精品久久久久中文字幕_少妇思春三a级_亚洲视频自拍偷拍

Java程序的優(yōu)化 Java程序的優(yōu)化

Java程序的優(yōu)化

  • 期刊名字:青海師范大學(xué)學(xué)報(bào)(自然科學(xué)版)
  • 文件大?。?02kb
  • 論文作者:張青
  • 作者單位:青海師范大學(xué)
  • 更新時(shí)間:2020-09-29
  • 下載次數(shù):
論文簡介

2004年青海師范大學(xué)學(xué)報(bào)(自然科學(xué)版)2004第4期Joumal of Qinghai Normal University(Natural Science)No.4Java程序的優(yōu)化張青(青海師范大學(xué)計(jì)算機(jī)系,青海西寧80008)摘要:本文通過使用 Javap對(duì)Jau 語言的字節(jié)代碼進(jìn)行分析找到程序中產(chǎn)生瓶頸的原因,給出程序的優(yōu)化方法.關(guān)鍵詞:字節(jié)代碼;優(yōu)化;程序; Jou中團(tuán)分類號(hào):1TP312JA文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1001 - 7542(200)04-0042 -03Jax是-種字節(jié)編碼的語言,用Jax編寫的源程序通過Jarac編譯后,生成同名可執(zhí)行的字節(jié)代碼(lass)文件,這種類型的文件無法閱讀其內(nèi)容.了解源程序轉(zhuǎn)換為字節(jié)代碼的原理,可為編程人員編寫出高效程序提供幫助.將字節(jié)代碼文件反編譯為文本文件有兩種方法:- -是Jax語言提供的Jaxap,該工具只能將數(shù)據(jù)區(qū)使用、方法及類的引用部分反編譯為文本文件;二是借助于某些工具,查出Jaxap無法辨析的錯(cuò)誤或反編譯出全部的字節(jié)代碼內(nèi)容,這些工具需查找軟件及使用說明,不如Jaxxp 直接簡單易操作.本文通過使用Jaxap 工具,分析其產(chǎn)生的文本文件的內(nèi)容,找出程序執(zhí)行產(chǎn)生瓶頸的代碼部分,使用優(yōu)化方法對(duì)程序進(jìn)行改進(jìn),以提高程序執(zhí)行效率.1優(yōu)化問題分析1.1 Jaxa分解器一 Jaxxp以下給出Jaxxp 的使用方法及說明:Method Test()public class Test0 aload_0public static void main( String args[])1 inwokepeial #1 < Method jowa. lang. 0bjeat()>{ Sysem. out . printIn(“hllo!");| }利用Jaxp的輸出格式: Jawapc Test 將字節(jié)代碼轉(zhuǎn)Mehad woid man(axa. lang . Sring[])換為可閱讀的文字,顯示結(jié)果如下:0 getstatic #2< Field jawa . io . PrintStream out >Compiled. from Test .jaua3 lde #3 < String" hello!" >public class Test extends java . lang . Object |5 imwkeiral #4 < Mabod woid pindn(ja . lang . Sring)>public Test();8 retum .public static woid main(jav . lang . String[]);}在main()方法的中,第一列表示指令的偏移量,第一條指令以0開始,緊跟偏移量后是指令助記符, getstatic 指令將一個(gè)靜態(tài)字段#2 < Field java . io . PrinInSream ou >壓人堆棧,查看字節(jié)代碼,其中的成員信息(字符串常量“hllo!" )并沒有直接嵌人指令中,指令中存放的是常量在常量池的索引值,該值從1開始,這樣做的目的是為了減少字節(jié)代碼指令的長度.常量池用于存放與類相關(guān)的常量,其中包括類名、變量名、常量值、方法名等,常量池是一個(gè)變長項(xiàng)的數(shù)組,每個(gè)常量占用一個(gè)項(xiàng) ,根據(jù)常量類型的不同,每項(xiàng)的存儲(chǔ)格式也相異.在這個(gè)例子中,成員信息位于常量池中#2位置.“l(fā)de" ( lod constant )為裝人常量指令,它是將常量“hello !"壓人堆棧.“inwokeirtual'’指令調(diào)用printIn方法.中國煤化工收稿日期:2004-01-02作者簡介:張青(1965 - ),女(漢族),陜西南鄭人,青海師范大學(xué)講師.MYHCNMHG第4期張青: Jaxa程序的優(yōu)化431.2. 使用String類Java語言是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,它是由包組成,各包含許多現(xiàn)成類,這些現(xiàn)成類為我們提供了象String和SringBufer這樣的類.通過使用這兩個(gè)類生成的對(duì)象(或?qū)嵗? ,對(duì)它們進(jìn)行分析.下面的兩行語句,是完成由String 類生成一個(gè)| //調(diào)用字符串緩沖的構(gòu)架器( Constructor);name對(duì)象并輸出字符串.20 aload_ 1 //保存該字符串緩沖到數(shù)組中String name = nevo Sring(“ZhangQing");(從位置1開始);System . out . printIn( name +" is my name );21 inolkevirtual #{經(jīng)過Jaxap產(chǎn)生的代碼如下:< Method jaxn . lang. SringBufer append (jana . lang.0new#2Sring)>//生成新的字符串new String(STR1);//以SIR 1為參數(shù),調(diào)用字符串緩沖( SringBufe)3 dup//復(fù)制該字符串;類中的append 方法;4 lde #3 < String." ZhangQing" >24 lde #9 < String“ is my name." >//加載字符串常量“ZhangQing"(STR2);//加載字符串常量“is my name"( STR3);6 inwokespecial # 426 inohevirtual #< Method java . lang . String(java. Lang . String)>< Method jxa. lang . SringBufer append (jaxn. lang .//調(diào)用字符串的構(gòu)架器( Constructor);Sring) >9 astore. 1//保存該字符串到數(shù)組中(從位置0開| //以STR 3為參數(shù),調(diào)用字符串緩沖( Sringufer)始);10 getstatic #5 < Field jaxa . io. PrinuStream out >29 inwohevirual # 10 < Method jaa. 1ang .//從jaa. io. PrinStreamn 類中得到靜態(tài)的out變| String to String()> //對(duì)于STR ,BUF.1執(zhí)行toSring量;命令;13 new #6 < Class java . lang . StringBufer >32 inwokevirtual # 11//生成新的字符串緩沖變量< Method woid prinln( java . lang . String)>new StringBufer( STR - BUF_ 1);//調(diào)用out變量中的println方法,輸出結(jié)果16 dup //復(fù)制該字符串緩沖變量;35 retum17 inokepecil #7 < Method jaxa .1ang . SringBufer()>這兩行代碼生成了STR 1, STR2, STR3, STR4和STR BUF_ 1五個(gè)對(duì)象變量,八種調(diào)用的方法:兩個(gè)new、兩個(gè)inokepecial和四個(gè)inokevirtual..3 使用SringBuyfer類將_上述兩行語句改為由Srigbufer 類生成的對(duì)象:StringBuyfer name = new StringByfer(”ZhangQing");System. out . prinIn( name . append(“is my name ."). loSring());再由Jaxp反編譯,代碼如下:0 new #2 < Class java . lang . StringBufer >//調(diào)用字符串緩沖的構(gòu)架器( Constructor);ner StringBufer( STR BUF. 1); .9 astre. 1 //保存該字符串緩沖到數(shù)組中3 dup //復(fù)制該字符串緩沖變量;4 lde #3 < String“ZhangQing">10 getst中國煤化工Stream out >//加載字符串常量“ZhangQing"(STR 1);//從janl| YHCNMHG的out變量;13 aload_1 //加載 STR .BUF_I;< Method jaxa . lang . StringBuyfer(jaxa. lang. String) | 14 lde #6 < String" is my name.">44青海師范大學(xué)學(xué)報(bào)(自然科學(xué)版)2004年//加載字符串常量“is my name"( STR2);tring()>16 inwokerirtual #7//對(duì)于STR BUF_ 1執(zhí)行toString 命令( STR3);< Method joxr. lang. SringBufer ppend (jan, lang.22 inwokerirtual #9String)>< Method xoid prinln( jawa . lang . String)>//以STR2為參數(shù),調(diào)用字符串緩沖( StringBufer)//調(diào)用out變量中的println方法,輸出結(jié)果.實(shí)例中的append 方法;25 retum19 inoevirtual #8 < Method java. lang . String toS-經(jīng)過改進(jìn)后的代碼只生成了四個(gè)對(duì)象變量: STR1, STR2, STR3和STR ,BUF.1,五種調(diào)用的方法:一個(gè)new、-一個(gè)inwokespecial 和三個(gè)inwokevirtual.2優(yōu)化方法比較上面的兩個(gè)類使用結(jié)果,用StringBufer類要比String類生成的對(duì)象和方法少.由于系統(tǒng)要生成對(duì)象并進(jìn)行方法的調(diào)用,還需對(duì)這些對(duì)象進(jìn)行垃圾回收和處理,且生成的類實(shí)例都存放在堆中,堆(hep)是內(nèi)存中的一塊區(qū)域,用來存放所有類實(shí)例和數(shù)組運(yùn)行時(shí)的數(shù)據(jù),在堆中的所有類實(shí)例、類的超類(父類)要進(jìn)行初始化,同時(shí)還要調(diào)用類以及每個(gè)超類的構(gòu)架器( Constrnctor) ,不但程序運(yùn)行時(shí)間長,還要占用相當(dāng)?shù)南到y(tǒng)資源.我們可采用以下的方法進(jìn)行優(yōu)化,以便提高程序運(yùn)行速度.①將對(duì)象設(shè)置為靜態(tài)變量(StaticClassVariable) ,因定義的靜態(tài)變量,可被其它的實(shí)例共享:②對(duì)于象String這樣類,因String類是處理那些值不發(fā)生改變的對(duì)象,重新生成- -個(gè)新的對(duì)象實(shí)例,比修改已經(jīng)生成的對(duì)象實(shí)例更能加快程序運(yùn)行:③在Jaa語言中很多類都有它的默認(rèn)空間,如StringBufer類,因StringBufer 類用于那些值發(fā)生變化的對(duì)象,它的默認(rèn)空間為16個(gè)字符,若使用大于16個(gè)字符,需初始化:④對(duì)于一些使用頻率不高或生命周期短的對(duì)象或變量將它們放人對(duì)象池中,對(duì)象池用于存儲(chǔ)類名稱、方法和字段名稱及串常量的存儲(chǔ)區(qū).管理一個(gè)對(duì)象池的開銷要比頻繁的生成和回收對(duì)象的開銷小的多;⑤在對(duì)象的作用范圍內(nèi)進(jìn)行初始化.3討論除上述文中涉及到的優(yōu)化方法外,還有一些象異常( Exceptions )處理,產(chǎn)生異?,F(xiàn)象- -般用try/ cach語句處理,在-些即可用try/ catch語句也可用if, while等邏輯語句處理異常的場(chǎng)合,使用后者更有益.從系統(tǒng)開銷的角度講,使用局部變量、不在同一個(gè)類中過多用函數(shù)或方法( get或set )來設(shè)置參數(shù)或調(diào)用變量,不在循環(huán)中生成同一個(gè)變量或 調(diào)用同一個(gè)函數(shù)(參數(shù)與變量- -樣), 使用象staic ,final , prioate 這樣的關(guān)鍵以及用System. araycopy( )來復(fù)制批量數(shù)據(jù)等方法,都可用來優(yōu)化程序.參考文獻(xiàn):[1]耿樣義.Java 實(shí)用教程[M].北京:清華大學(xué)出版社,001.[2]吳曉東. Java程序設(shè)計(jì)基礎(chǔ)[M].北京:清華大學(xué)出版社202.0The optimization questions of Java design programmesZHANG Qing(Computer Deatment of Qinghai Nomal Univerit Xinino 81008 China)Abstract: By analying the bytecode of Jaxa language, ThisMH中國煤化工a why botle-neck comes into being in the programmes , and also gives some optiCNMHGmes.Key words: byecode; optimization; programmer; Jaxa

論文截圖
版權(quán):如無特殊注明,文章轉(zhuǎn)載自網(wǎng)絡(luò),侵權(quán)請(qǐng)聯(lián)系cnmhg168#163.com刪除!文件均為網(wǎng)友上傳,僅供研究和學(xué)習(xí)使用,務(wù)必24小時(shí)內(nèi)刪除。