Java性能優化

響應時間的分類

正則表達式的組成

目前正則表達式引擎有兩種

  1. DFA自動機 Deterministic Final Automata 確定有限狀態自動機
  2. NFA自動機 Non deterministic Finite Automaton 非確定有限狀態自動機

構造DFA代價大於NFA,但DFA執行效率高於NFA
正則表達式庫都是基於NFA的,優勢是支持更多功能
NFA自動機的回溯,如 "ab{1,3}c"
1.貪婪模式Greedy,儘可能匹配更多內容
2.懶惰模式Reluctant, ab{1,3}?c,會首先選擇最小的匹配範圍,即匹配1個b字符
3.獨佔模式Possessive,ab{1,3}+bc,會最大限度匹配更多內容,但匹配失敗就會結束匹配,不會回溯
避免低效的回溯方法是,使用懶惰模式,獨佔模式
 

Stream 操作的分類

它的並行操作是用Fork-Join框架實現的

JDK8的 HashMap數據結構圖

Java序列化的缺點
1.無法跨語言
2.太靈活容易被攻擊
3.序列化後的流太大
4.序列化性能太差
替代方案
FastJson,Kryo,Protobuf,Hessian,Thrift
單列的對象如果序列化了,也會破壞單列的規則

微服務的核心是 遠程通信 和 服務治理(服務的後勤保障)
MVC,RPC,SOA,微服務架構的演變

默認的RMI框架執行圖


RMI的缺點
1.Java默認序列化性能不佳
2.TCP短連接
3.阻塞式網絡I/O

高併發場景下的RPC框架設計思路
1.選擇合適的通訊協議 TCP/UDP
2.單一長連接
3.優化Socket通訊,非阻塞I/O,Reactor線程模型,零拷貝,pipeline模式
4.自定義報文格式


5.編碼解碼,選擇一個序列化框架
6.調整系統參數

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章