-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 營(yíng)銷(xiāo)推廣 > 專題列表 > 正文
- java課程分享如何寫(xiě)出優(yōu)質(zhì)Java代碼的4個(gè)技巧
- javac=a/b如何優(yōu)化代碼
- Java編程中的性能優(yōu)化如何實(shí)現(xiàn)?
- Java學(xué)習(xí)中代碼優(yōu)化的方法有哪些
java代碼優(yōu)化(java代碼優(yōu)化方法有哪些)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于java代碼優(yōu)化的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁(yè)版、PC客戶端和批量生成器
問(wèn)友Ai官網(wǎng):https://ai.de1919.com。
本文目錄:
java課程分享如何寫(xiě)出優(yōu)質(zhì)Java代碼的4個(gè)技巧
如果現(xiàn)在要求對(duì)你寫(xiě)的Java代碼進(jìn)行優(yōu)化,那你會(huì)怎么做呢?作者在本文介紹了可以提高系統(tǒng)性能以及代碼可讀性的四種方法,如果你對(duì)此感興趣,就讓java課程一起來(lái)看看吧。
我們平時(shí)的編程任務(wù)不外乎就是將相同的技術(shù)套件應(yīng)用到不同的項(xiàng)目中去,對(duì)于大多數(shù)情況來(lái)說(shuō),這些技術(shù)都是可以滿足目標(biāo)的。然而,有的項(xiàng)目可能需要用到一些特別的技術(shù),因此工程師們得深入研究,去尋找那些最簡(jiǎn)單但最有效的方法。在以前一篇文章中,我們討論了必要時(shí)可以使用的四種特殊技術(shù),這些特殊技術(shù)可以創(chuàng)建更好的Java軟件;而本文我們將介紹一些有助于解決常見(jiàn)問(wèn)題的通用設(shè)計(jì)策略和目標(biāo)實(shí)現(xiàn)技術(shù),即:
1.只做有目的性的優(yōu)化
2.常量盡量使用枚舉
3.重新定義類(lèi)里面的equals()方法
4.盡量多使用多態(tài)性
值得注意的是,本文中描述的技術(shù)并不是適用于所有情況。另外這些技術(shù)應(yīng)該什么時(shí)候使用以及在什么地方使用,都是需要使用者經(jīng)過(guò)深思熟慮的。
1.只做有目的性的優(yōu)化
大型軟件系統(tǒng)肯定非常關(guān)注性能問(wèn)題。雖然我們希望能夠?qū)懗鲎罡咝У拇a,但很多時(shí)候,如果想對(duì)代碼進(jìn)行優(yōu)化,我們卻無(wú)從下手。
最重要的是天下沒(méi)有免費(fèi)的午餐,因此為了降低代價(jià),我們通常會(huì)通過(guò)類(lèi)似于緩存、循環(huán)展開(kāi)或預(yù)計(jì)算值這類(lèi)技術(shù)去實(shí)現(xiàn)優(yōu)化,這樣反而增加了系統(tǒng)的復(fù)雜性,也降低了代碼的可讀性。如果這種優(yōu)化可以提高系統(tǒng)的性能,那么即使變得復(fù)雜,那也是值得的,但是做決定之前,必須首先知道這兩條信息:
1.性能要求是什么
2.性能瓶頸在哪里
首先我們需要清楚地知道性能要求是什么。如果最終是在要求以內(nèi),并且最終用戶也沒(méi)有提出什么異議,那么就沒(méi)有必要進(jìn)行性能優(yōu)化。但是,當(dāng)添加了新功能或者系統(tǒng)的數(shù)據(jù)量達(dá)到一定規(guī)模以后就必須進(jìn)行優(yōu)化了,否則可能會(huì)出現(xiàn)問(wèn)題。
在這種情況下,不應(yīng)該靠直覺(jué),也不應(yīng)該依靠檢查。因?yàn)榧词故窍馦artinFowler這樣有經(jīng)驗(yàn)的開(kāi)發(fā)人員也容易做一些錯(cuò)誤的優(yōu)化,正如在重構(gòu)(第70頁(yè))一文中解釋的那樣:
如果分析了足夠多的程序以后,你會(huì)發(fā)現(xiàn)關(guān)于性能的有趣之處在于,大部分時(shí)間都浪費(fèi)在了系統(tǒng)中的一小部分代碼中里面。如果對(duì)所有代碼進(jìn)行了同樣的優(yōu)化,那么最終結(jié)果就是浪費(fèi)了90%的優(yōu)化,因?yàn)閮?yōu)化過(guò)以后的代碼運(yùn)行得頻率并不多。因?yàn)闆](méi)有目標(biāo)而做的優(yōu)化所耗費(fèi)的時(shí)間,都是在浪費(fèi)時(shí)間。
javac=a/b如何優(yōu)化代碼
1. 使用正確的數(shù)據(jù)結(jié)構(gòu)和算法:使用正確的數(shù)據(jù)結(jié)構(gòu)和算法可以極大地提高代碼的性能。2. 盡量減少不必要的循環(huán):盡量減少不必要的循環(huán),可以極大地減少代碼的執(zhí)行時(shí)間。
3. 使用緩存:使用緩存可以極大地提高代碼的性能,減少重復(fù)計(jì)算。
4. 使用多線程:使用多線程可以極大地提高代碼的執(zhí)行效率。
5. 使用合理的變量名:使用合理的變量名可以極大地提高代碼的可讀性,減少出錯(cuò)的可能性。
Java編程中的性能優(yōu)化如何實(shí)現(xiàn)?
性能優(yōu)化我覺(jué)得應(yīng)該分兩步走,第一步:尋找性能瓶頸,第二步:性能調(diào)優(yōu);
下面分別進(jìn)行分析:
第一步:尋找性能瓶頸
通常性能瓶頸的表象是資源消耗過(guò)多、外部處理系統(tǒng)的性能不足;或者資源消耗不多,但是程序效應(yīng)還是很慢;
資源主要消耗在cpu,文件io,網(wǎng)絡(luò)io以及內(nèi)存方面,當(dāng)某一資源消耗過(guò)多會(huì)造成系統(tǒng)響應(yīng)慢;
外部處理系統(tǒng)的性能不足主要是所調(diào)用其他系統(tǒng)提供的功能或數(shù)據(jù)庫(kù)的響應(yīng)速度不夠,外部系統(tǒng)慢可能也是資源消耗過(guò)多導(dǎo)致,數(shù)據(jù)庫(kù)響應(yīng)慢可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行調(diào)優(yōu);
資源消耗不多但仍然慢主要原因是程序代碼運(yùn)行效率不高,未充分使用資源或程序結(jié)構(gòu)不合理;
1.1cpu消耗分析
可以通過(guò)相關(guān)命令比如top,pidstat,找出各個(gè)類(lèi)型消耗cpu的占比,最常見(jiàn)的就是us和sy類(lèi)型分別代表用戶進(jìn)程消耗和線程間切換消耗;如果us過(guò)高可以找到相關(guān)的線程ID然后分析代碼;如果sy過(guò)高是不是啟動(dòng)了過(guò)多的線程導(dǎo)致線程切換過(guò)多;
1.2文件io消耗
要跟蹤線程的文件IO消耗,可以通過(guò)pidstat來(lái)查找,可以查到每秒的讀寫(xiě)kb數(shù);找到讀寫(xiě)kb數(shù)多個(gè)線程,然后結(jié)合jstack找到相關(guān)的java代碼,然后分析;
1.3網(wǎng)絡(luò)io消耗
可以通過(guò)sar來(lái)分析網(wǎng)絡(luò)的消耗狀況,但是不能具體到每個(gè)線程所消耗的網(wǎng)絡(luò)IO,只能對(duì)線程dump,查找產(chǎn)生了大量網(wǎng)絡(luò)io的線程;
1.4內(nèi)存消耗
結(jié)合top或pidstat,以及jvm的內(nèi)存分析工具來(lái)分析內(nèi)存消耗;要區(qū)分是jvm外的物理內(nèi)存還是jvmheap區(qū)內(nèi)存;如果是jvm外的物理內(nèi)存要分析程序中DirectByteBuffer,如果是jvmheap可以通過(guò)jvisualvm來(lái)分析;
1.5資源消耗不多但仍然慢
主要原因是:鎖競(jìng)爭(zhēng)激烈,未充分使用硬件資源,數(shù)據(jù)量增長(zhǎng)
第二步:性能調(diào)優(yōu)
2.1jvm調(diào)優(yōu)
主要包括各個(gè)代的大小、GC策略等;代大小的設(shè)置:避免新生代大小設(shè)置過(guò)小,或者過(guò)大;避免Survivor區(qū)過(guò)小或過(guò)大;合理設(shè)置新生代存活周期;GC策略根據(jù)吞吐量?jī)?yōu)先還是延遲優(yōu)先進(jìn)行設(shè)置策略;
2.2程序調(diào)優(yōu)
1.CPU消耗嚴(yán)重解決
us過(guò)高主要是執(zhí)行線程無(wú)任何掛起動(dòng)作,可以進(jìn)行Thread.sleep操作;sy過(guò)高主要是因?yàn)閯?chuàng)建了過(guò)多的線程導(dǎo)致線程上下文切換;
2.文件IO消耗嚴(yán)重解決
造成文件IO消耗嚴(yán)重的原因主要是多個(gè)線程寫(xiě)大量的數(shù)據(jù)到同一個(gè)文件,導(dǎo)致文件很快變的很大,從而寫(xiě)入速度越來(lái)越慢,并造成各線程激烈競(jìng)爭(zhēng)爭(zhēng)搶文件鎖,常用的調(diào)優(yōu)方法:異步寫(xiě)文件,批量讀寫(xiě),限流,限制文件大??;
3.網(wǎng)絡(luò)IO消耗嚴(yán)重解決
主要原因是同時(shí)發(fā)送或者接受的包太多,解決辦法就是限流;
4.內(nèi)存消耗嚴(yán)重解決
解決:釋放不必要的引用,使用對(duì)象緩存池,采用合理的緩存失效策略,合理使用softReference和WeakReference;
2.3資源消耗不多但仍然慢
主要原因是:鎖競(jìng)爭(zhēng)激烈,未充分使用硬件資源
Java學(xué)習(xí)中代碼優(yōu)化的方法有哪些
每個(gè)人都說(shuō)代碼是程序員手中的一把雕刻刀,是對(duì)他們產(chǎn)品輪廓和細(xì)節(jié)的打磨。每個(gè)程序員在代碼優(yōu)化方面需要做的是,即使是每天處理代碼的程序員也有很多關(guān)于他們編寫(xiě)代碼的問(wèn)題,所以優(yōu)化很重要。下面北京昌平IT培訓(xùn)為大家介紹代碼優(yōu)化的方法。
1、盡量重用目標(biāo)
特別是,使用代表字符串收斂的String目標(biāo)應(yīng)該使用StringBuilder/StringBuffer。因?yàn)镴ava虛擬機(jī)不僅要花時(shí)間生成目標(biāo),而且可能還需要花時(shí)間檢索和刪除這些目標(biāo),所以北京計(jì)算機(jī)學(xué)院發(fā)現(xiàn)生成太多目標(biāo)會(huì)對(duì)程序的功能產(chǎn)生重大影響。
2、可以運(yùn)用局部變量
調(diào)用方法時(shí)傳遞的參數(shù)和調(diào)用中創(chuàng)建的臨時(shí)變量保存在堆棧中的速度更快。其他變量,如靜態(tài)變量、實(shí)例變量等等,在堆中創(chuàng)建,速度較慢。此外,昌平北大青鳥(niǎo)發(fā)現(xiàn)在堆棧中創(chuàng)建的變量,方法的操作結(jié)束,當(dāng)這些內(nèi)容都消失了,就不需要額定廢物回收。
3、及時(shí)封閉流
Java的程序編寫(xiě)過(guò)程中,數(shù)據(jù)庫(kù)連接,I/O流操作必須謹(jǐn)慎,應(yīng)用結(jié)束后,應(yīng)該及時(shí)關(guān)閉發(fā)布資源。因?yàn)楸本﹋ava培訓(xùn)發(fā)現(xiàn)這些大目標(biāo)的運(yùn)行會(huì)造成大系統(tǒng)支出,稍有不慎就會(huì)導(dǎo)致嚴(yán)重的結(jié)果。
以上就是關(guān)于java代碼優(yōu)化相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
免費(fèi)網(wǎng)站java源碼大全不下載(國(guó)內(nèi)無(wú)代碼)
基于javaweb的圖書(shū)管理系統(tǒng)(基于javaweb的圖書(shū)管理系統(tǒng)論文)
杭州Java研發(fā)崗位薪資范圍(杭州java研發(fā)崗位薪資范圍是多少)
工業(yè)設(shè)計(jì)畢設(shè)抄(工業(yè)設(shè)計(jì) 畢設(shè))
龍蝦設(shè)計(jì)輔助圖形vi(龍蝦設(shè)計(jì)畫(huà))
猜你喜歡
關(guān)于青春勵(lì)志的題記(關(guān)于青春勵(lì)志的題記摘抄大全)
在微信里弄個(gè)小程序多少錢(qián)(小程序開(kāi)發(fā)費(fèi)用一覽表)
怎樣在微博里找作者發(fā)的小說(shuō)(怎樣在微博里找作者發(fā)的小說(shuō)文章)
分辨率和顯卡有關(guān)還是和顯示器有關(guān)(分辨率和顯卡有關(guān)還是和顯示器有關(guān)呢)
小紅書(shū)文案的調(diào)查報(bào)告(小紅書(shū)文案的調(diào)查報(bào)告怎么寫(xiě))
ai試用期7天過(guò)了怎么破解(ai試用期7天過(guò)了怎么破解 蘋(píng)果)