摘要:當(dāng)創(chuàng)建一個(gè)異常時(shí),需要收集一個(gè)棧跟蹤,這個(gè)棧跟蹤用于描述異常是在何處創(chuàng)建的。招致性能損失的并不是操作盡管在沒(méi)有預(yù)先創(chuàng)建異常的情況下就拋出異常是有點(diǎn)不尋常。異常是為異常的情況而設(shè)計(jì)的,使用時(shí)也應(yīng)該牢記這一原則。
當(dāng)創(chuàng)建一個(gè)異常時(shí),需要收集一個(gè)棧跟蹤(stack track),這個(gè)棧跟蹤用于描述異常是在何處創(chuàng)建的。構(gòu)建這些棧跟蹤時(shí)需要為運(yùn)行時(shí)棧做一份快照,正是這一部分開(kāi)銷很大。
當(dāng)需要?jiǎng)?chuàng)建一個(gè) Exception 時(shí),JVM 不得不說(shuō):先別動(dòng),我想就您現(xiàn)在的樣子存一份快照,所以暫時(shí)停止入棧和出棧操作。棧跟蹤不只包含運(yùn)行時(shí)棧中的一兩個(gè)元素,而是包含這個(gè)棧中的每一個(gè)元素。
如果您創(chuàng)建一個(gè) Exception ,就得付出代價(jià),好在捕獲異常開(kāi)銷不大,因此可以使用 try-catch 將核心內(nèi)容包起來(lái)。從技術(shù)上講,你甚至可以隨意地拋出異常,而不用花費(fèi)很大的代價(jià)。
招致性能損失的并不是 throw 操作——盡管在沒(méi)有預(yù)先創(chuàng)建異常的情況下就拋出異常是有點(diǎn)不尋常。真正要花代價(jià)的是創(chuàng)建異常,幸運(yùn)的是,好的編程習(xí)慣已教會(huì)我們,不應(yīng)該不管三七二十一就拋出異常。異常是為異常的情況而設(shè)計(jì)的,使用時(shí)也應(yīng)該牢記這一原則。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74781.html
摘要:本章中的大部分內(nèi)容適用于構(gòu)造函數(shù)和方法。第項(xiàng)其他方法優(yōu)先于序列化第項(xiàng)謹(jǐn)慎地實(shí)現(xiàn)接口第項(xiàng)考慮使用自定義的序列化形式第項(xiàng)保護(hù)性地編寫(xiě)方法第項(xiàng)對(duì)于實(shí)例控制,枚舉類型優(yōu)先于第項(xiàng)考慮用序列化代理代替序列化實(shí)例附錄與第版中項(xiàng)目的對(duì)應(yīng)關(guān)系參考文獻(xiàn) effective-java-third-edition 介紹 Effective Java 第三版全文翻譯,純屬個(gè)人業(yè)余翻譯,不合理的地方,望指正,感激...
摘要:推薦序前言致謝第一章引言第二章創(chuàng)建和銷毀對(duì)象第項(xiàng)用靜態(tài)工廠方法代替構(gòu)造器第項(xiàng)遇到多個(gè)構(gòu)造器參數(shù)時(shí)要考慮使用構(gòu)建器第項(xiàng)用私有構(gòu)造器或者枚舉類型強(qiáng)化屬性第項(xiàng)通過(guò)私有構(gòu)造器強(qiáng)化不可實(shí)例化的能力第項(xiàng)優(yōu)先考慮依賴注入來(lái)引用資源第項(xiàng)避免創(chuàng)建不必要的對(duì)象 推薦序 前言 致謝 第一章 引言 第二章 創(chuàng)建和銷毀對(duì)象 第1項(xiàng):用靜態(tài)工廠方法代替構(gòu)造器 第2項(xiàng):遇到多個(gè)構(gòu)造器參數(shù)時(shí)要考慮使用構(gòu)建器 第...
摘要:代碼優(yōu)化的最重要的作用應(yīng)該是避免未知的錯(cuò)誤。此舉能夠使性能平均提高。拋出異常首先要?jiǎng)?chuàng)建一個(gè)新的對(duì)象,接口的構(gòu)造函數(shù)調(diào)用名為的本地同步方法,方法檢查堆棧,收集調(diào)用跟蹤信息。異常只能用于錯(cuò)誤處理,不應(yīng)該用來(lái)控制程序流程。 showImg(https://segmentfault.com/img/remote/1460000015379073); 代碼優(yōu)化的最重要的作用應(yīng)該是:避免未知的錯(cuò)誤...
摘要:此舉能夠使性能平均提高。盡可能使用局部變量調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧中速度較快,其他變量,如靜態(tài)變量實(shí)例變量等,都在堆中創(chuàng)建,速度較慢。 showImg(https://segmentfault.com/img/bVbsIIl?w=900&h=383);本文來(lái)源 |?http://atjf.top/3WLPmG 作者 | 萌小Q 01前沿 代碼優(yōu)化 ,一個(gè)...
摘要:捕獲不到異步錯(cuò)誤嘗試對(duì)異步方法進(jìn)行操作只能捕獲當(dāng)次事件循環(huán)內(nèi)的異常,對(duì)執(zhí)行時(shí)拋出的異常將無(wú)能為力。這里并不能捕獲回調(diào)里面拋出的異常異步情況想捕獲異常,建議在異步函數(shù)里包一層。前端可以用在上傳圖片使用別人的庫(kù)報(bào)錯(cuò)同步調(diào)接口等地方適用。 前言 自從ECMA-262第3版引入了try catch語(yǔ)句,作為JavaScript中處理異常的一種標(biāo)準(zhǔn)方式?;镜恼Z(yǔ)法如下所示。 一、try catc...
閱讀 2097·2021-10-08 10:21
閱讀 2490·2021-09-29 09:34
閱讀 3505·2021-09-22 15:51
閱讀 4946·2021-09-22 15:46
閱讀 2324·2021-08-09 13:42
閱讀 3447·2019-08-30 15:52
閱讀 2734·2019-08-29 17:13
閱讀 1564·2019-08-29 11:30