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的各域分配策略動態變化