




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)Java異常的性能分析Java異常的性能分析
發(fā)表于:2023-03-31來(lái)源:不祥:Java譯站點(diǎn)擊數(shù):標(biāo)簽:java
Java異常的性能分析.在Java中拋異常的性能是非常差的。通常來(lái)說(shuō),拋一個(gè)異常大概會(huì)消耗100到1000個(gè)時(shí)鐘節(jié)拍。
在(Java)中拋異常的(性能)是非常差的。通常來(lái)說(shuō),拋一個(gè)異常大概會(huì)消耗100到1000個(gè)時(shí)鐘節(jié)拍。
通常是出現(xiàn)了意想不到的錯(cuò)誤,我們才會(huì)往外拋異常。也就是說(shuō),我們肯定不希望一個(gè)進(jìn)程一秒鐘就拋出上千個(gè)異常。不過(guò)有時(shí)候你確實(shí)會(huì)碰到有些方法把異常當(dāng)作事件一樣往外拋。我們?cè)谶@篇文章中已經(jīng)看到一個(gè)這樣的典范):sun.misc.BASE64Decoder之所以性能很差就是因?yàn)樗ㄟ^(guò)拋異常來(lái)對(duì)外請(qǐng)求道,'我還需要更多的數(shù)據(jù)":
at(java).lang.Throwable.fillInStackTrace(Throwable.(java):-1)
atjava.lang.Throwable.fillInStackTrace(Throwable.java:782)
-locked0x6c(asun.misc.CEStreamExhausted)
atjava.lang.Throwable.(Throwable.java:250)
atjava.lang.Exception.(Exception.java:54)
atjava.io.IOException.(IOException.java:47)
atsun.misc.CEStreamExhausted.(CEStreamExhausted.java:30)
atsun.misc.BASE64Decoder.decodeAtom(BASE64Decoder.java:117)
atsun.misc.CharacterDecoder.decodeBuffer(CharacterDecoder.java:163)
atsun.misc.CharacterDecoder.decodeBuffer(CharacterDecoder.java:194)
如果你用一個(gè)數(shù)字開(kāi)頭,字母結(jié)尾的字符串來(lái)運(yùn)行下這篇文章里面的pack方法,你也會(huì)碰到類似的情況。我們來(lái)看下用那個(gè)方法打包12345和12345a需要多長(zhǎng)的時(shí)間:
Made100.000.000iterationsforstring12345:time=12.109sec
Made1.000.000iterationsforstring12345a:time=21.764sec
可以看到,12345a迭代的次數(shù)要比12345少100倍。也就是說(shuō)這個(gè)方法處理12345a慢了差不多200倍。大多數(shù)的處理時(shí)間都在填充異常的棧跟蹤信息了:
atjava.lang.Throwable.fillInStackTrace(Throwable.java:-1)
atjava.lang.Throwable.fillInStackTrace(Throwable.java:782)
-locked0x87(ajava.lang.NumberFormatException)
atjava.lang.Throwable.(Throwable.java:265)
atjava.lang.Exception.(Exception.java:66)
atjava.lang.RuntimeException.(RuntimeException.java:62)
atjava.lang.IllegalArgumentException.(IllegalArgumentException.java:53)
atjava.lang.NumberFormatException.(NumberFormatException.java:55)
atjava.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
atjava.lang.Long.parseLong(Long.java:441)
atjava.lang.Long.valueOf(Long.java:540)
atcom.mvorontsov.javaperf.StrConvTests.pack(StrConvTests.java:69)
atcom.mvorontsov.javaperf.StrConvTests.test(StrConvTests.java:38)
atcom.mvorontsov.javaperf.StrConvTests.main(StrConvTests.java:29)
通過(guò)手動(dòng)解析數(shù)字,我們可以很容易提升pack方法的性能。不過(guò)不要忘了不到萬(wàn)不得已,不要隨便優(yōu)化。如果你只是解析幾個(gè)輸入?yún)?shù)而已keepitsimple,就用JDK的方法就好了。如果你要解析大量的消息,又必須調(diào)用一個(gè)類似pack這樣的方法那確實(shí)得去優(yōu)化一下了。
新的pack方法和舊的實(shí)現(xiàn)差不太多把一個(gè)字符串轉(zhuǎn)化成一個(gè)盡可能小的Character/Integer/Long/Double/String類型,使得result.toString().equals(orginalString)為true。
publicstaticObjectstrToObject(finalStringstr)
{
if(str==null||str.length()17)
{//outofLongrange
returnstr;
}
if(str.equals())
return;//ensureinternedstringisreturned
if(str.length()==1)
returnstr.charAt(0);//returnCharacter
//ifstartswithzero-supportonly0and0.something
if(str.charAt(0)==0)
{
if(str.equals(0))
return0;
if(!str.startsWith(0.))//thismaybeadouble
returnstr;
}
longres=0;
intsign=1;
for(inti=0;istr.length();++i)
{
finalcharc=str.charAt(i);
if(c=9c=0)
res=res*10+(c-0);
elseif(c==.)
{
//toolazytowriteaproperDoubleparser,useJDKone
try
{
finalDoubleval=Double.valueOf(str);
//checkifvalueconvertedbacktostringequalstoanoriginalstring
finalStringreverted=val.toString();
returnreverted.equals(str)?val:str;
}
catch(NumberFormatExceptionex)
{
returnstr;
}
}
els
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2194-2025氧化鋅避雷器測(cè)試儀校準(zhǔn)規(guī)范
- LY/T 3350-2023展平竹砧板
- 2025至2030年中國(guó)半胱胺酒石酸鹽數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職管理學(xué)與服務(wù)通關(guān)題庫(kù)(附帶答案)
- 2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)強(qiáng)化訓(xùn)練試卷A卷附答案
- 模擬卷浙江寧波2025屆高三一模語(yǔ)文試題及答案
- (一模)哈三中2025屆高三第一次模擬考試 語(yǔ)文試題(含答案)
- 公司管理理念宣傳手冊(cè)(講座內(nèi)容)
- 中學(xué)生讀書(shū)勵(lì)志征文
- 化工圖標(biāo)知識(shí)培訓(xùn)課件
- 2025安徽省投資集團(tuán)控股有限公司校園招聘34人筆試參考題庫(kù)附帶答案詳解
- 2025年新部編統(tǒng)編版中學(xué)七年級(jí)下冊(cè)歷史全冊(cè)分課知識(shí)點(diǎn)總結(jié)課件105張
- 2025年湖南科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)匯編
- 語(yǔ)文-浙江省寧波市慈溪市2024學(xué)年高二第一學(xué)期期末測(cè)試試題和答案
- 2025海南三亞政府雇員人才儲(chǔ)備庫(kù)招聘300人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 植被重建施工方案
- 培養(yǎng)自律與自控能力主題班會(huì)
- 交替?zhèn)髯g課件外研社王丹
- 人教版(2024)八年級(jí)下冊(cè)物理第九章《壓強(qiáng)》第4節(jié) 跨學(xué)科實(shí)踐:制作簡(jiǎn)易活塞式抽水機(jī) 教案
- 《餐飲業(yè)概述》課件 - 探索美食與服務(wù)之道
- 2024年黑龍江生態(tài)工程職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論