優化系列

Mysql優化算法

1儘量讓字段not nullsql

2選擇正確的存儲引擎,myisam是表鎖 寫,innodb是行鎖,查數據庫

3爲每張表設置一個id做爲其主鍵。這個id最好是一個int類型的緩存

4當只須要一條數據時使用LIMIT 1.咱們做爲開發者,是可以知道咱們須要的數據的條數的,若已經知道結果只有一條的時候,必定要使用limit 1 ,這樣一來,MySQL在查詢到一條數據以後,會當即中止搜索,這會帶來性能上的提高服務器

5使用緩存。緩存是解決這類問題的一把手。它既能夠加快整個系統(並不是數據庫系統,使用緩存的時候並無去訪問數據庫)的訪問速度,也能夠減小數據庫負載的壓力併發

6爲搜索字段建索引工具

7垂直分割,把數據庫中的表按列變成幾張表的方法,這樣能夠下降表的複雜度和字段的數目,從而達到優化的目的性能

 

JVM調優優化

1使用調優工具線程

2查看堆信息

有了堆信息查看方面的功能,咱們通常能夠順利解決如下問題:

  --年老代年輕代大小劃分是否合理

  --內存泄漏

  --垃圾回收算法設置是否合理

3線程監控

死鎖檢查

4查看熱點

CPU熱點:檢查系統哪些方法佔用的大量CPU時間

內存熱點:檢查哪些對象在系統中數量最大(必定時間內存活對象和銷燬對象一塊兒統計)

5使用快照對比,迅速發現問題

這兩個東西對於系統優化頗有幫助。咱們能夠根據找到的熱點,有針對性的進行系統的瓶頸查找和進行系統優化,而不是漫無目的的進行全部代碼的優化。

 

 

 

1按系統線程選好收集器的算法

         串行處理器:

         -- 適用狀況:數據量比較小(100M左右),單處理器下而且對相應時間無要求的應用。

         -- 缺點:只能用於小型應用。

         並行處理器:

          -- 適用狀況:「對吞吐量有高要求」,多CPU,對應用過響應時間無要求的中、大型應用。舉例:後臺處理、科學計算。

          -- 缺點:垃圾收集過程當中應用響應時間可能加長。

         併發處理器:

          -- 適用狀況:「對響應時間有高要求」,多CPU,對應用響應時間有較高要求的中、大型應用。舉例:Web服務器/應用服務器、電信交換、集成開發環境。

2堆大小設置

年輕帶和老年代大小

 

 

        什麼狀況下觸發垃圾回收

        因爲對象進行了分代處理,所以垃圾回收區域、時間也不同。GC有兩種類型:Scavenge GC 和 Full GC

        Scavenge GC

        通常狀況下,當新對象生成,而且在Eden申請空間失敗時,就會觸發Scavenge GC,對Eden區域進行GC,清除非存活對象,而且把尚且存活的對象移動到Survivor區。而後整理Survivor的兩個區。這種方式的GC是對年輕代的Eden區進行,不會影響到年老代。由於大部分對象都是從Eden區開始的,同時Eden區不會分配的很大,因此Eden區的GC會頻繁進行。於是,通常在這裏須要使用速度快、效率高的算法,使Eden區能儘快空閒出來。

         Full GC

         對整個堆進行整理,包括Young、Tenured 和 Perm。Full GC 由於須要對整個堆進行回收,因此比 Scavenge GC 要慢,所以應該儘量減小 Full GC 的次數。在對JVM調優的過程當中,很大一部分工做就是對於 Full GC 的調節。

有以下緣由可能致使Full GC:
         . 年老代(Tenured)被寫滿

         . 持久代(Perm)被寫滿

         . System.gc()被顯式調用

         . 上一次GC以後Heap的各域分配策略動態變化

相關文章
相關標籤/搜索