欧美日操-欧美日韩91-欧美日韩99-欧美日韩ay在线观看-xxxx色-xxxx视频在线

java學習-如何用Java進行高性能網站開發

2018-05-03 09:41:38 智能互動  點擊量: 評論 (0)
如何用Java進行高性能網站開發,本文給大家梳理了一下

1、生成對象時,合理分配空間和大小:

Java中的很多類都有它的默認的空間分配大小,對于一些有大小的對象的初始化,應該預計對象的大小,然后使用進行初始化。

例如:我們在使用Vector,當聲明Vector vect=new Vector()時,系統調用:

public Vector() {// 缺省構造函數

this(10); // 容量是 10;

}

缺省分配10個對象大小容量。當執行add方法時,可以看到具體實現為:..

public synchronized boolean add(Object o) {

modCount++;

ensureCapacityHelper(elementCount+1);

elementData[elementCount++] =o;

return true;

}

private void ensureCapacityHelper(int minCapacity) {

int oldCapacity = elementData.length;

if (minCapacity > oldCapacity) {

Object oldData[] = elementData;

int newCapacity = (capacityIncrement > 0) ? (oldCapacity + capacityIncrement) :

(oldCapacity * 2);

if (newCapacity < minCapacity) {

newCapacity = minCapacity;

}

elementData = new Object[newCapacity];

System.arraycopy(oldData, 0, elementData, 0, elementCount);

}

}

我們可以看到,當Vector大小超過原來的大小時,一些代碼的目的就是為了做容量的擴充,在預先知道該Vector大小的話,可以指定其大小,避免容量擴充的開銷。

如果想學習Java可以來這個群,首先是一二六,中間是五三四,最后是五一九,里面有大量的學習資料可以下載。

2、優化循環體:

循環是比較重復運行的地方,如果循環次數很大,循環體內不好的代碼對效率的影響就會被放大而變的突出。讓我們看看下面的代碼片:..

Vector vect = new Vector(1000);

...

for( inti=0; i<vect.size(); i++){

...

}

for循環部分改寫成:

int size = vect.size();

for( int i=0; i>size; i++){

...

}

如果size=1000,就可以減少1000次size()的系統調用開銷,避免了循環體重復調用。

再看如下的代碼片:..

for (int i = 0;i <100000;i++)

if (i%10 == 9) {

... // 每十次執行一次

}

改寫成也可以提高效率:..

for(inti =0,j =10; i<100000; i++,j--){

if(j == 0){

... // 每十次執行一次

j = 10;

}

}

所以,當有較大的循環時,應該檢查循環內是否有效率不高的地方,尋找更優的方案加以改進。

3、少用new初始化一個實例:

盡量少用new來初始化一個類的實例,當一個對象是用new進行初始化時,其構造函數鏈的所有構造函數都被調用到,所以new操作符是很消耗系統資源的,new一個對象耗時往往是局部變量賦值耗時的上千倍。同時,當生成對象后,系統還要花時間進行垃圾回收和處理。

當new創建對象不可避免時,注意避免多次的使用new初始化一個對象。

盡量在使用時再創建該對象。如:

NewObject object = new NewObject();

int value;

if(i>0 )

{

value =object.getValue();

}

上面一段代碼可以修改為:

int value;

if(i>0 )

{

NewObject object = new NewObject();

Value =object.getValue();

}

另外,應該盡量重復使用一個對象,而不是聲明新的同類對象。一個重用對象的方法是改變對象的值,如可以通過setValue之類的方法改變對象的變量達到重用的目的。

4、選擇合適的方法調用:

在Java中,一切都是對象,如果有方法(Method)調用,處理器先要檢查該方法是屬于哪個對象,該對象是否有效,對象屬于什么類型,然后選擇合適的方法并調用。

可以減少方法的調用,同樣一個方法:

public void CallMethod(int i ){

if( i ==0 ){

return;

}

... // 其他處理

}

如果直接調用,

int i = 0;

...

CallMethod(i);

上面的代碼,就應該寫成:

int i = 0;

...

if( i ==0 ){

CallMethod(i);

}

不影響可讀性等情況下,可以把幾個小的方法合成一個大的方法。

另外,在方法前加上final,private關鍵字有利于編譯器的優化。

5、異常處理技巧:

異常是Java的一種錯誤處理機制,對程序來說是非常有用的,但是異常對性能不利。拋出異常首先要創建一個新的對象,并進行相關的處理,造成系統的開銷,所以異常應該用在錯誤處理的情況,不應該用來控制程序流程,流程盡量用while,if等處理。

在不是很影響代碼健壯性的前提下,可以把幾個try/catch塊合成一個。

如果想學習Java可以來這個群,首先是一二六,中間是五三四,最后是五一九,里面有大量的學習資料可以下載。

6、盡量使用局部變量和靜態變量:

盡量使用局部變量,調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧(Stack) 中,速度較快。其他變量,如靜態變量、實例變量等,都在堆(Heap)中創建,速度較慢。

盡量使用靜態變量,即加修飾符static,如果類中的變量不會隨他的實例而變化,就可以定義為靜態變量,從而使他所有的實例都共享這個變量。

7、同步處理技巧:

同步主要出現在多線程的情況,為多線程同時運行時提供對象數據安全的機制,多線程是比較復雜話題,應用多線程也是為了獲得性能的提升,應該盡可能減少同步。

另外,如果需要同步的地方,可以減少同步的代碼段,如只同步某個方法或函數,而不是整個代碼。

8、盡可能的使用Java自身提供的API:

Java的API一般都做了性能的考慮,如果完成相同的功能,優先使用API而不是自己寫的代碼,如數組復制通常的代碼如下:

int size = 1000;

String[] strArray1 = new String[size];

String[] strArray2 = new String[size];

for(inti=0;i<size;i++){ // 賦值

strArray1 = (new String("Array: " + i));

}

for(inti=0;i<size;i++){ // 復制

strArray2=(new String((String)a));

}

上面那段代碼,如果使用Java提供的API,就可以提高性能:

int size = 1000;

String[] strArray1 = new String[size];

String[] strArray2 = new String[size];

for(inti=0;i<size;i++){ // 賦值

strArray1 = (new String("Array: " + i));

}

System.arraycopy(strArray1,0,strArray2,0,size); // 復制

同樣的一個規則是,當有大量數據的復制時,應該使用System.arraycopy()。

9、盡量減少I/O操作:

輸入/輸出(I/O)包括很多方面,我們知道,進行I/O操作是很消耗系統資源的。程序中應該盡量少用I/O操作。使用時可以注意: . 合理控制輸出函數System.out.println()對于大多時候是有用的,特別是系統調試的時候,但也會產生大量的信息出現在控制臺和日志上,同時輸出時,有序列化和同步的過程,造成了開銷。

特別是在發行版中,要合理的控制輸出,可以在項目開發時,設計好一個Debug的工具類,在該類中可以實現輸出開關,輸出的級別,根據不同的情況進行不同的輸出的控制。

10、盡量使用緩存:

讀寫內存要比讀寫硬盤上的文件要快很多,應盡可能使用緩沖,以便直接從內存中讀取數據。

盡可能使用帶有Buffer的類代替沒有Buffer的類,如可以用BufferedReader 代替Reader,用BufferedWriter代替Writer來進行處理I/O操作。

同樣可以用BufferedInputStream代替InputStream都可以獲得性能的提高

11、盡量不使用同步:

Servlet是多線程的,以處理不同的請求,基于前面同步的分析,如果有太多的同步就失去了多線程的優勢了。

12、不用保存太多的信息在HttpSession中

很多時候,存儲一些對象在HttpSession中是有必要的,可以加快系統的開發,如網上商店系統會把購物車信息保存在該用戶的Session中,但當存儲大量的信息或是大的對象在會話中時,是有害的,特別是當系統中用戶的訪問量很大,對內存的需求就會很高。

具體開發時,在這兩者之間應作好權衡。

13、清除SESSION

通常情況,當達到設定的超時時間時,同時有些Session沒有了活動,服務器會釋放這些沒有活動的Session,.. 不過這種情況下,特別是多用戶并訪時,系統內存要維護多個的無效Session。

當用戶退出時,應該手動釋放,回收資源,實現如下:..

HttpSession theSession = request.getSession();

// 獲取當前Session

if(theSession != null){

theSession.invalidate(); // 使該Session失效

}

14、緩存Home接口

EJB庫使用Enterprise Bean 的客戶端通過它的Home接口創建它的實例。客戶端能通過JNDI訪問它。服務器通過Lookup方法來獲取。

JNDI是個遠程對象,通過RMI方式調用,對它的訪問往往是比較費時的。所以,在設計時可以設計一個類專門用來緩存Home接口,在系統初始化時就獲得需要的Home接口并緩存,以后的引用只要引用緩存即可。

15、使用快速度的Jdbc驅動

JDBC API包括兩種實現接口形式,一種是純Java實現的驅動,一種利用ODBC驅動和數據庫客戶端實現,具體有四種驅動模式:

第一類:JDBC-ODBC橋,再加上ODBC驅動程序。

第一類JDBC驅動程序是JDBC-ODBC橋再加上一個ODBC驅動程序。建議第一類驅動程序只用于原型開發,而不要用于正式的運行環境。橋接驅動程序由Sun提供,它的目標是支持傳統的數據庫系統。Sun為該軟件提供關鍵問題的補丁,但不為該軟件的最終用戶提供支持。一般地,橋接驅動程序用于已經在ODBC技術上投資的情形,例如已經投資了Windows應用服務器。

盡管Sun提供了JDBC-ODBC橋接驅動程序,但由于ODBC會在客戶端裝載二進制代碼和數據庫客戶端代碼,這種技術不適用于高事務性的環境。另外,第一類JDBC驅動程序不支持完整的Java命令集,而是局限于ODBC驅動程序的功能,這種驅動方式也叫胖客

大云網官方微信售電那點事兒

責任編輯:售電衡衡

免責聲明:本文僅代表作者個人觀點,與本站無關。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。
我要收藏
個贊
?
主站蜘蛛池模板: 香蕉久久一区二区三区| 特黄特色的大片观看免费视频| 色狠狠干| 中文字幕激情视频| 野外xxxxfreexxxx印度| 超碰97人人做人人爱网站| 欧美精品专区第1页| 手机看片一区二区| 日韩免费视频一区| 在线国产你懂的| 主播蜜汁丝袜 精品自拍| 奶大B紧17p| 四虎影院成人| 色噜噜色噜噜天天拍一拍| 色综合视频在线| 777久久人妻少妇嫩草AV| 欧美精品色婷婷五月综合| 日本成人免费在线观看| 日韩专区亚洲综合久久| 息孑性教育中文字幕影音先锋| 最新日韩| 久久香蕉国产免费天天| 天天综合色网| 青草娱乐极品免费视频| 自偷自拍亚洲综合精品| 99热久久视频只有精品6| 免费精品一区二区三区AA片| 四虎网址| 四虎最新紧急更新地址| 亚洲欧美专区精品伊人久久| 俄罗斯另类Z0Z0ZOZO| 日本xxxxxx片免费播放18| 亚洲国产一区在线| 五月婷婷六月天| 一区二区在线播放福利视频| 国产人妻人伦精品59HHH| 一区二区三区国产| 色涩播| 五月婷六月| 又大又粗又爽的三级小视频| 精品无码无人网站免费视频|