java學習概覽

裝載:http://blog.chinaunix.net/uid-9789791-id-1997452.html

1.分佈式JAVA應用 

基於TCP/IP+BIO,TCP/IP+NIO,UDP/IP +BIO,UDP/IP+NIO 實現消息方式的系統間的通信方式 
基於MINA,JETTY框架 
基於遠程調用 RMI(spring rmi),WebService(CXF) 

2.大型分佈式java應用與SOA 
基於SCA實現SOA平臺 
基於ESB實現SOA平臺 
ESB核心思想是基於消息中間件來實現系統間的交互 
基於Tuscany實現SOA平臺--SCA 
基於Mule實現SOA平臺   --ESB 

3.深入理解JVM 
Java源碼編譯步驟 1.分析和輸入到符號表 2.註解處理  3.語義分析和生成class文件 
類加載機制 1.裝載(二進制字節碼加載至JVM)   2.鏈接(負責對二進制字節碼的格式進行校驗,初始化裝載類中靜態變量及解析類中調用的接口,類) 
           3.初始化(執行類中的靜態初始化代碼,構造器代碼及靜態屬性的初始化) 
JDK基於棧的體系結構來執行字節碼,基於棧方式是好處爲代碼緊湊,體積小. 
編譯時提供兩種模式:client compiler 和 server compiler 
client compiler 是輕量級,只做少量性能開銷比高的優化,它佔用內存較少,適用於桌面交互式應用。優化主要有:方法內聯,去虛擬化,冗餘削除。 
server compiler 是重量級,採用了大量的傳統編譯優化技巧來進行優化,佔用內存相對會多一些,適用於服務器的應用。 
堆用於存儲對象及數組值。 
-XMS -XMX 設置一樣的大小,防止內存大於變化。 
jstat -gcutil [pid] 1000 10 minor GC時的變化情況 
jconsole 可以圖形查看JVM內存變化狀況 
JVisualVM 它類似於JPofiler 工具,基於此工具可查看內存的消耗情況,線程的執行狀況及程序中消耗CPU,內存的動作。 
JMap 分析JVM內存狀況的工具 jmap -heap [pid] --查看JVM堆的配置信息 
jmap -histo [pid] 查看JVM堆中對象詳細佔用情況 
jHat 是java自帶的一個用於分析jvm堆dump文件工具  jhat -J-Xmx1024 [file] 
jStat JAVA自帶的一個統計分析JVM運行狀況的工具 
Eclipse Memory Analyzer 分析jvm 堆dump文件的插件 
TDA是開源界一個不錯的用於分析線程堆棧信息的圖形化工具 

5。性能調優 
調用步驟:衡量系統現狀  設定調優目標  尋找性能瓶頸 性能調優   衡量是否達到目標  性能調優 
通常性能瓶頸在表象是資源消耗過多,外部處理系統性能不足,或得資源消耗不多 
資源主要消耗在CPU,文件IO,網絡IO以級內存方法,機器的資源是有限的。當某些資源消耗過多時,通常會造成系統的響應速度慢。 
分析CPU  上下文切換, 運行隊列 ,利用率 
top 或 pidstat 方式來查看進程中線程的CPU的消耗狀況 
us 過高時,表示運行的應用消耗了大部分的CPU,sy值高時,表示Linux 花費了更多時間在進行線程的切換。 
pidstat -d -t -p [pid] 1 100 查看線程IO消耗情況 
iostat查看各個設備的IO歷史狀況 
Linux 中可採用sar 來分析網絡IO 的消耗狀況 
vmstat 查看內存信息 

JVM調優 
1.避免新生代大小設置過小 -當新生代大小設置過小時,會產生兩種比較明顯的現象,一是minor GC次數更加頻繁,二是有可能導致minor gc對象直接進入舊生代。 
2.避免新生代設置過大 
3.避免Survivor區過小或過大 
4.合理設置新生代存活週期 

程序調優 
1.us過高 增加 Thread.sleep 
2.sy 過高 基於kilim 採用Coroution方式支撐高併發 

最耗CPU的線程26697爲例,將26697換算成十六進制的值,結合java thread dump (jstack [pid] | grmp 'nid = 0x6849') 找到些線程 

文件IO消耗嚴重解決方法 
1.異步寫文件  log4j AsyncAppender 
2.批量寫文件 
3.限流 
4.限文件大小 

網絡IO消耗嚴重的解決方法 
1.釋放不必要的引用 
2.使用對象緩存池 
3.採用合理的緩存失效算法 
4.合理使用SoftReference 和 WearReference 


銷競爭激烈 
1.使用併發包中的類 
2.使用Treiber 算法 
3.使用michael-scott非阻塞隊列算法 
4.儘可能少用鎖 
5.拆分鎖 
6.去除讀寫操作的互斥鎖 

6。構建高可用的系統 
負載均均衡技術 
選擇實際業務處理機器方式 1.隨機選擇  2.Hash選擇  3.(Round-Robin)選擇   4.按權重選擇  5.按負載選擇  6.按連接選擇 
響應返回方式  1.響應通過負載均衡機器返回(NAT)   2.響應直接返回請求發起方(IP Tunneling 或  DR) 
硬件負載設備  F5 各 Netscalar 
軟件負載  LVS 
去中心實現負載均衡   Gossip(Cassandra 採用) 
基於Paxos保存一致性 
Fackbook Scribe 日誌分析系統 
書推薦 web容量規劃的藝術 


7.構建可伸縮的系統 

分佈式文件系統  HDFS GFS 
DAL(數據庫訪問層)--- amoeba 
支撐大數據量  讀寫分離    多master 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章