摘要:開發者在編程中除了要有編程規范,還要注意性能哦,今天就工作中遇到的一些問題進行了一個簡單總結,希望攻城獅來批評指正。
開發者在編程中除了要有編程規范,還要注意性能,在 Java 編程中有什么提高性能的好辦法呢?
本文轉自國內 ITOM 行業領軍企業 OneAPM Cloud Insight(一款能夠優雅監控多種操作系統、數據庫、中間件、云主機的解決方案)美女工程師陳永梅簡書。
開發者在編程中除了要有編程規范,還要注意性能哦,今天就工作中遇到的一些問題進行了一個簡單總結,希望攻城獅來批評指正。
作為一個QA,從質量管理方面得到的認識:
一行代碼能解決的問題 盡量不要使用多行,代碼行數越多 維護成本越高,出現缺陷的概率也就越多;
一行代碼編寫可能只需要 30s,發現并優化一行代碼產生的性能問題需要 72h,甚至更多。
不說了,下面就簡單說下實際編程過程中性能相關的問題吧:
1、循環邏輯中減少創建對象次數
例如:
for(int i = 0;i < list.size; i ++) { … }
應替換為:
for(int i = 0,int len = list.size();i < len; i ++) { … }
2、關注循環結構是否存在多次訪問網絡、數據庫等操作
原則:能夠一次性查詢完成的 盡量避免多次查詢。
優化前:
優化后:
3、對象容錯性差
原則:參數傳遞過程中不要直接轉換使用 JSONObject 這種對象,如果取值不存在該方法會報異常導致程序中止,盡量轉為 JavaBean 或 Map;否則應先判斷取的值是否存在。最好以 JavaBean 封裝接收參數,并對參數進行初步較驗,不能將數據完整性交給前端處理。
如果使用 JSONObject 對象,應先進行存在判斷if(json.contains(“xxx”))
4、對需要緩存的信息進行合理設計
原則:登錄功能要分析哪些是跟用戶密切相關的,如 session 信息,哪些是跟業務系統屬性相關的,如系統配置資源信息。后者則應當進行緩存處理,避免每次登錄都構建獲取信息。
5、業務邏輯的執行順序問題
原則:在進行邏輯判斷的過程中,盡量使復雜操作延遲執行,不要提前執行;如登錄操作,只有登錄成功后才做相關資源加載、查詢操作;
如示例:靜態資源應盡量后置,建議大家在業務邏輯梳理時先否定再肯定,也就是先列不滿足業務的條件。
優化前:
優化后:
6、Try…catch 相對消耗性能比較嚴重,盡量減少使用頻率,使用中盡量擴大作用范圍,禁止出現在循環等操作中。
7、創建類似數組等可以設定大小的對象,應盡可能指定大小,最大限度減少內存空間的浪費。
8、HashMap 的讀取遍歷使用 entry,而不是先取 key 集合,再取值。
9、在方法中創建的對象最好在使用完畢后將引用指向 null,利于 GC 垃圾回收。
10、數組復制使用 system.arraycopy(),減少使用創建新數組賦值的方法。
11、方法大小不要超過80行,方法棧太深容易導致內存溢出;盡量不要出現功能太少的類,類的維護也需要性能開銷。
12、創建復雜對象應使用clone方法,減少構造方法調用的開銷。
13、待續...
Cloud Insight 集監控、管理、計算、協作、可視化于一身的數據管理平臺,幫助所有 IT 公司,減少在系統監控上的人力和時間成本投入,讓運維工作更加高效、簡單。
本文轉自 OneAPM 官方博客
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65553.html
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
摘要:常見的八大排序算法,他們之間關系如下被人忽視的面向對象的六大原則后端掘金前言作為文集的第一篇,我覺得有必要介紹一下大概的寫作規劃。 Java多線程干貨系列—(四)volatile關鍵字| 掘金技術征文 - 掘金原本地址:Java多線程干貨系列—(四)volatile關鍵字博客地址:http://tengj.top/ 前言 今天介紹下volatile關鍵字,volatile這個關鍵字可能...
閱讀 1602·2021-11-02 14:48
閱讀 3657·2019-08-30 15:56
閱讀 2771·2019-08-30 15:53
閱讀 3214·2019-08-30 14:09
閱讀 3101·2019-08-30 12:59
閱讀 2857·2019-08-29 18:38
閱讀 2697·2019-08-26 11:41
閱讀 2215·2019-08-23 16:45