欧美日操-欧美日韩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驅動程序的功能,這種驅動方式也叫胖客

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

責任編輯:售電衡衡

免責聲明:本文僅代表作者個人觀點,與本站無關。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。
我要收藏
個贊
?
主站蜘蛛池模板: 深夜福利欧美| 欧美日韩小视频| 日韩精品你懂的在线播放| 无遮挡高清一级毛片免费| 思思99热在线观看精品| 四虎国产在线观看| 欧美一级做a爰片免费| 日本一区二区三区在线网| 亚洲欧美4444kkkk| 青青草成人在线| 亚洲一区二区在线免费观看| 一国产一级淫片a免费播放口| 亚洲精品播放| 欧美国产亚洲一区二区三区| 色综合久久久久久| 青久在线| 亚洲国产精品一区二区第一页| 思思99热| 一级黄片一级毛片| 羞羞色男人的天堂伊人久久| 手机看片福利盒子久久青| 欧美激情在线| 婷婷久久综合九色综合九七| 三级成人网| 亚洲高清不卡视频| 热线视频在线观看| 日韩精品第一页| 亚洲国产精品第一区二区三区| 欧洲精品码一区二区三区免费看| 欧美日韩国产中文字幕| 亚洲免费网站观看视频| 四虎永久在线视频| 亚洲欧美专区精品伊人久久 | 色影师与国模大尺度啪啪| 亚洲伊人久久一次| 日本免费网| 亚洲无线一二三四区手机| 欧美亚洲欧美日韩中文二区| 亚洲美女精品视频| 日本亚洲欧美| 亚洲一区二区三区久久|