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