熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java 6中的性能優化

2013-11-15 11:43:41  來源: JSP教程 

  JSE (代號Mustang野馬)主要設計原則之一就是提升JSE的性能和擴展能力主要通過最大程度提升運行效率更好的垃圾收集和一些客戶端性能來達到

  偏向鎖(Biased locking)

  Java 以前加鎖操作都會導致一次原子CAS(CompareAndSet)操作CAS操作是比較耗時的即使這個鎖上實際上沒有沖突只被一個線程擁有也會帶來較大開銷為解決這一問題Java 中引入偏向鎖技術即一個鎖偏向於第一個加鎖的線程該線程後續加鎖操作不需要同步大概的實現如下一個鎖最初為NEUTRAL狀態當第一個線程加鎖時將該鎖的狀態修改為BIASED並記錄線程ID當這一線程進行後續加鎖操作時若發現狀態是BIASED並且線程ID是當前線程ID則只設置一下加鎖標志不需要進行CAS操作其它線程若要加這個鎖需要使用CAS操作將狀態替換為REVOKE並等待加鎖標志清零以後該鎖的狀態就變成 DEFAULT常用舊的算法處理這一功能可用XXUseBiasedLocking命令禁止

  鎖粗化(Lock coarsening)

  如果一段代碼經常性的加鎖和解鎖在解鎖與下次加鎖之間又沒干什麼事情則可以將多次加加鎖解鎖操作合並成一對這一功能可用XXEliminateLocks禁止

  自適應自旋(Adaptive spinning)

  一般在多CPU的機器上加鎖實現都會包含一個短期的自旋過程自旋的次數不太好決定自旋少了會導致線程被掛起和上下文切換增加自旋多了耗CPU為此Java 中引入自適應自旋技術即根據一個鎖最近自旋加鎖成功概率動態調整自旋次數

  常用大內存分布的堆(large page heap)

  在大內分頁是x/amd架構上用來減小TLB(虛擬地址到物理地址翻譯緩存)大小的TLB失配率Java 中的內存堆可以使用這一技術

  提高數組拷貝性能

  對每種類型大小寫一個定制的匯編數組拷貝程序

  後台進行代碼優化

  Background Compilation in HotSpot&#; Client Compiler 後台進行代碼優化

  線性掃描寄存器分配算法(Linear Scan Register Allocation)

  一種新的寄存器分配策略基於SSA(static single assignment)性能提高%左右常用的寄存器分配算法將寄存器分配看作圖著色問題時間復雜度是O(n^不適用於Java的JIT編譯原來的JVM裡是根據一些本地啟發式規則來分配寄存器效果不太好Java 中使用的線性掃描寄存器算法能夠達到與圖顏色算法相似的效果並且時間復雜度是線性的

  並行縮並垃圾收集器(Parallel Compaction Collector)

  進行Full GC時使用並行垃圾收集(JDK 裡原來非Full GC是並行的但Full GC是串行的)使用XX+UseParallelOldGC開啟這一功能

  並行低停頓垃圾收集器(Concurrent Low Pause Collector)

  顯式調用gc(如Systemgc)時也可以並行進行標記清掃式垃圾收集使用XX+ExplicitGCInvokesConcurrent開啟

  Ergonomics in the Java Virtual Machine

  自動調整垃圾收集策略堆大小等配置這一功能在JDK 中加入JDK 中得到顯著增強SPECjbb性能提高%

  boot類裝載器的優化

  jre中增加一個描述package所在jar文件的元索引文件加快classloader加載類性能提高桌面Java應用啟動速度(+%)內存占用也減少了%

  圖形程序優化

  在jvm啟動之前顯示splash

  Swing程序中每個窗口有一個後台顯示緩存當該窗口原來被遮擋現在要顯示時直接從該緩存拷貝數據進行渲染即使該窗口的繪制線程被阻塞也可以完成這一渲染


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19509.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.