Ⅰ 如何提高java性能
提高JAVA的性能,一般考慮如下的四個主要方面:
(1) 程序設計的方法和模式
一個良好的設計能提高程序的性能,這一點不僅適用於JAVA,也適用也任何的編程語言。因為它充分利用了各種資源,如內存,CPU,高速緩存,對象緩沖池及多線程,從而設計出高性能和可伸縮性強的系統。
當然,為了提高程序的性能而改變原來的設計是比較困難的,但是,程序性能的重要性常常要高於設計上帶來的變化。因此,在編程開始之前就應該有一個好的設計模型和方法。
(2) JAVA布署的環境。
JAVA布署的環境就是指用來解釋和執行JAVA位元組碼的技術,一般有如下五種。即解釋指令技術(Interpreter Technology),及時編譯的技術(Just In Time Compilier Technology), 適應性優化技術(Adaptive Optimization Technology), 動態優化,提前編譯為機器碼的技術(Dynamic Optimization,Ahead Of Time Technology)和編譯為機器碼的技術(Translator Technology).
這些技術一般都通過優化線程模型,調整堆和棧的大小來優化JAVA的性能。在考慮提高JAVA的性能時,首先要找到影響JAVA性能的瓶頸(BottleNecks),在確認了設計的合理性後,應該調整JAVA布署的環境,通過改變一些參數來提高JAVA應用程序的性能。具體內容見第二節。
(3) JAVA應用程序的實現
當討論應用程序的性能問題時,大多數的程序員都會考慮程序的代碼,這當然是對的,當更重要的是要找到影響程序性能的瓶頸代碼。為了找到這些瓶頸代碼,我們一般會使用一些輔助的工具,如Jprobe,Optimizit,Vtune以及一些分析的工具如TowerJ Performance等。這些輔助的工具能跟蹤應用程序中執行每個函數或方法所消耗掉的時間,從而改善程序的性能。
(4) 硬體和操作系統
為了提高JAVA應用程序的性能,而採用跟快的CPU和更多的內存,並認為這是提高程序性能的唯一方法,但事實並非如此。實踐經驗和事實證明,只有遭到了應用程序性能的瓶頸,從而採取適當得方法,如設計模式,布署的環境,操作系統的調整,才是最有效的。
3.程序中通常的性能瓶頸。
所有的應用程序都存在性能瓶頸,為了提高應用程序的性能,就要盡可能的減少程序的瓶頸。以下是在JAVA程序中經常存在的性能瓶頸。
了解了這些瓶頸後,就可以有針對性的減少這些瓶頸,從而提高JAVA應用程序的性能
4. 提高JAVA程序性能的步驟
為了提高JAVA程序的性能,需要遵循如下的六個步驟。
a) 明確對性能的具體要求
在實施一個項目之前,必須要明確該項目對於程序性能的具體要求,如:這個應用程序要支持5000個並發的用戶,並且響應時間要在5秒鍾之內。但同時也要明白對於性能的要求不應該同對程序的其他要求沖突。
Ⅱ 試述javascript和java在性能上的差異
java是面對對象的編程,javascript是一種可以嵌入Web頁面中的基於對象和事件驅動的解釋性語言,用來向頁面添加交互效果,使頁面動態化。
java是需要進行預編譯的,javascript不需要預編譯,在程序的運行過程中逐行進行解釋,由瀏覽器解釋執行。
java定義變數需要定義數據類型,而js中沒有數據類型,以賦值為准。
Ⅲ 提高Java性能的幾個高效用法
1.循環
■ 在重要的循環里,消除循環終止判斷時的方法調用。。。
例如:將...
for( int i = 0; i < collection.size(); i++){
...
}
替換為…
for( int i = 0; n = collection.size(); i < n; i++){
...
}
通常,把與循環index不相關的移到循環的外面
for( int i = 0; terminal = x.length; i < terminal; i++){
X[i] = x[i] / scaleA * scaleB
}
應該該成:
Double scale = scaleb / scaleA;
for( int i = 0; terminal = x.length; i < terminal; i++){
X[i] = x[i] * scale
}
2.字元串
■ 消除字元串連接
■ 創建長字元串時,總是使用StringBuffter代替String
■ 預先分配StringBuffer空間
StringBuffer sb = new StringBuffer(5000);
3.基本數據類型
■ 在重要的循環里使用基本數據類型(int型數據通常比long/double型數據更快)
■ 基本數據類型(Boolean,Integer,etc)的包裝類主要用在當傳遞的方法參數必須是一個對象的引用時(而不是一個基本數據類型)
■ 對所有的常量代數表達式使用static final修飾符
一 使常量更容易引用(編譯器預先計算常量表達式)
4.異常
■ 異常只用於單個真正的錯誤條件
一 拋出一個異常和執行一個catch代碼塊花費是很高的(主要由於當創建一個異常時要獲得線程棧的一個快照)
一 只當條件真的異常時才拋出一個異常
■ 使編譯器和運行時最優化,將幾個方法調用放在一個try/catch塊中,而不是為每個方法調用實現幾個try/catch塊
try{
Some.method1(); //Difficut for javac
} catch (method1Exception e) { //and the JVM runtime
//Handle exception 1// to optimixe this code
}
try{
Some.method2();
} catch (method2Exception e) {
// Handle exception 2
}
try{
Some.method3();
} catch (method3Exception e) {
// Handle exception 3
}
try{
Some.method1();
Some.method2();
Some.method3(); // easier to optimize
} catch (method1Exception e) {
// Handle exception 1
} catch (method2Exception e) {
// Handle exception 2
} catch (method3Exception e) {
// Handle exception 3
}
5.基準
■ 注意,所有這些技巧會因不同的平台和虛擬機而不同
一 例如:在有些servlet容器內,通過一個OutputStream作為位元組輸出會更快
一 在其它的容器內,通過一個PrintWriter輸出字元會更快
■ 這些技巧描述的是最可移植的建議
■ 你可能需要運行一些基準來判斷在你的平台上怎麼樣是最快的
Ⅳ java 測試性能 指的是什麼呀
指的就是 你開發的程序,性能怎麼樣,
增刪改查 的速度
大數據處理,
這些都是性能問題
Ⅳ 網上說 Java 的性能已經達到甚至超過 C++,是真的嗎
看看這些軟體有幾個是Java開發的:游戲服務端,金融交易服務端,資料庫服務端。
Java的運行效率不可能超過C++(前提都是設計良好的情況下),因為Java到機器之間還有個jvm,這個難道不是顯而易見的嘛?
開發效率的提高必然遠離機器語言,因為接近機器語言怎麼可能開發效率高呢?
Ⅵ java性能優化權威指南怎麼樣
下面給你提供一些在JAVA程序的設計和編碼中,經常採用的一些方法和技巧,可以提高JAVA程序的性能:
1.對象的生成和大小的調整。
JAVA程序設計中一個普遍的問題就是沒有好好的利用JAVA語言本身提供的函數,從而常常會生成大量的對象(或實例)。由於系統不僅要花時間生成對象,以後可能還需花時間對這些對象進行垃圾回收和處理。因此,生成過多的對象將會給程序的性能帶來很大的影響。
例1:關於String ,StringBuffer,+和append
JAVA語言提供了對於String類型變數的操作。但如果使用不當,會給程序的性能帶來影響。如下面的語句:
String name=new String("HuangWeiFeng");
System.out.println(name+"is my name");
Ⅶ 怎樣利用Java開發高性能
1、開發高性能Java程序的原則和方法:
決定一個Java程序性能的好壞,是多方面的因素,包括前期的系統結構設計、底層平台架構設計、應用開發中的代碼編寫以及技巧的使用,系統平台的軟體配置,系統平台的硬體性能等等。這里只給出代碼編寫方面的一些原則和方法。
相對於Java的其他方面,在性能領域Java飽受的非議可能最多。許多人認為,Java如果想更好的發展下去必須解決性能問題。然而真正的事實是Java在編譯器、JVM以及運行期優化方面確實在不斷的進步,Java正在運行的越來越快。實際上很多的性能問題,是由於設計不佳引起的,與Java本身並無關系。在拙劣的設計和編碼面前,無論你使用多少運行期優化,無論你的編譯技術多麼先進,無論你的硬體平台性能多麼強大,最後的代碼運行依然低效。
同樣無論運行期優化技術、編譯技術以及硬體平台多麼強大,運用一些已被驗證對Java運行性能有益的技術,總是能獲得非常好的收益。
優化程序代碼的注意事項:
1.除非必須優化,否則不要輕易改動;
2.改動之後要進行仔細的測試;
3.在各個JVM產品中,優化的方式是有區別的;
2、高性能Java的編碼原則:
(1)、先把焦點放在設計、數據結構和演算法身上;
(2)、不要依賴於編譯器編譯期優化技術,正確理解運行期代碼優化技術以及正確使用運行期代碼優化;
(3)、使用StringBuffer類完成字元串連接;
(4)、將對象創建成本降至最低,即盡量創建輕量級對象;
1、合理設計對象大小
2、合理設計類的繼承深度
3、類的構造函數要短小精幹
4、不要創建非必要的對象
5、將對象的創建拖延到最後一刻,即延遲載入技術
6、可能的話要自己實現一個對象緩沖管理池,將對象的創建與回收控制在一個合理的范圍內
(5)、降低同步化帶來的影響;
1、合理識別是否一定要使用同步控制,盡量從設計上避免
2、注意控制同步代碼范圍,避免對線程活躍度造成影響
3、合理使用鎖變數,做到線程分離,提高程序並發度,更進一步提高程序吞吐量
4、用於鎖變數的對象不宜過多,當要使用多個對象作為鎖變數時,一定要確保在代碼中自始自終按照同樣的順序鎖定它們,否則可能導致死鎖
(6)、盡可能使用Stack變數和基本類型完成必要的任務;
(7)、使用static、final、private方法以促成inlining;
(8)、實例變數初始化一次就好;(即一定義就會有一個初始值,下面不需要再進行一次初始化)
(9)、集群類對象的處理;
(10)、盡可能重用對象;(11)、使用延遲載入技術;
Ⅷ java性能優化權威指南和java程序性能優化哪本好
1、調整垃圾收集(GC)
由於垃圾收集的復雜性,很難發現你的應用的准確性能。不過,如果你真的想優化你的應用,你應該相應地處理垃圾收集。通用的准則是調整GC設置並同時執行性能分析。
一旦你對結果感到滿意,你可以停止該過程並尋求其他優化方式。確保除了在平均事務處理時間之外,你還留心了異常值。這些異常值是造成Java應用緩慢的真正的罪魁禍首並且很難找到。
此外,你要明白應用運行期間性能下降的效應。在每單個cpu時鍾內的緩慢操作是可以忽略的,但在每單個資料庫事務中的緩慢操作則是非常昂貴的消耗。但是你應該根據性能短板選擇你的優化策略,並應該根據工作負載來優化應用。
2、正確地選擇適合你的GC演算法
讓我們更深入地探討GC優化。畢竟,GC優化是要處理的整個優化問題中最基本的。目前,Java中有四種供你選擇的垃圾收集演算法。每種演算法滿足不同的需求,因此你要選擇(適合你的需求的)。很多開發人員正是因為不了解GC演算法而未能優化他們的應用。
這四個演算法分別是串列回收器,並行/吞吐量回收器,CMS回收器和G1回收器。想要了解更多關於每種垃圾收集器的信息及它們是如何工作的,請查看這篇來自Takipi博客的非常棒的文章Garbage Collectors—Serial vs。 Parallel vs。 CMS vs。 G1。這篇文章同時還討論了Java8對GC演算法的影響及其他細節上的改變。讓我們再回到GC演算法上,根據Understanding Java Garbage Collection這篇文章所述,並發標記和清除GC(即」CMS」)演算法才是適合網路服務端應用的最佳演算法。並行GC演算法適合那些內部可預測的應用。
G1和CMS是並發操作的理想選擇,但仍然會引起(應用)頻繁停頓。實際的選擇取決於你如何取捨。舉例來說,盡管選擇並行演算法會帶來更長的GC停頓時間,但相較於其他GC演算法,選擇並行演算法仍是一個好主意。
3、Java堆
Java內存堆在迎合內存需求方面擔任了至關重要角色。通常更好的做法是初始時分配最小的堆,然後通過持續的測試不斷增加它的大小。大多數時候優化問題都可以通過增加堆的大小解決,但如果存在大量的GC開銷,則該解決方案不起作用。
GC開銷還會使吞吐量急劇下降,進而使得應用難以形容的慢。此外,及早調整GC可以幫助你避免堆大小分配的問題。開始的時候,你可以選擇任何1GB到8GB的堆大小。當你選擇正確的堆大小,老生代和新生代對象的概念也就不需要了。總而言之,堆大小應該取決於老生代和新生代對象的比率,之前的GC優化和對象集合(即所有對象佔用的內存大小)。
4、關鍵應用優化
關鍵代碼優化是優化你的Java應用最好的方式。如果你的應用對GC和堆優化沒有反應,那麼最好是做架構改進並關注於你的應用是如何處理信息的。使用聰明的演算法並管理好對象就能解決大量的問題,包括內存碎片,堆大小問題和垃圾收集的問題。
5、使用最優的函數
Java提供了多個函數來提升演算法效率。如果你使用StringBuilder代替簡單的String,你可以得到微乎其微的性能提升。不過,我們還有其他方式在代碼層面進行優化。讓我們看看下面這些優化方法。
使用StringBuilder代替+操作符。
避免使用iterator。
多使用棧帶來的好處。
避免使用正則表達式,使用Apache Commons Lang作為代替。
遠離遞歸。遞歸會佔用大量資源!
Ⅸ 為什麼java開發游戲性能和效率差
java面向對象,所有方法都是封裝在類里的,要調用方法就得實例類,而游戲主要側重的是邏輯
對象就像是很多功能的機器,但是我的游戲邏輯只要每台機器的其中一個功能,但要用的話必須把這一整台機器製造出來。這就是面向對象的缺陷吧
而c是面向過程的可以更加靈活地設計過程邏輯,少去很多多餘東西,大大提高性能
java的長處就是利用各種現存的類包,達到復用的效果,大大提高開發效率,
當然java也可以只針對邏輯來設計類,但那不是java的長處,沒有多大的意義
所有可以總結為:java開發的高效率導致的缺點是性能的降低,當然這不是絕對的,大部分情況下是這樣
Ⅹ 如何進行java性能測試
缺陷管理工具 Bugzilla
功能測試工具 WinRunner
負載測試工具 LoadRunner
http://softtest.chinaitlab.com/