欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线

高性能java代碼優化器 java代碼優化工具

如何優化JAVA代碼及提高執行效率

網站優化通常包含兩方面的內容:減小代碼的體積和提高代碼的運行效率。減小代碼的體積已經寫過太多這類的文章了,下面就簡單討論下如何提高代碼的效率。一、不用new關鍵詞創建類的實例用new關鍵詞創建類的實例時,構造函數鏈中的所有構造函數都會被自動調用。但如果一個對象實現了Cloneable接口,我們可以調用它的clone()方法。clone()方法不會調用任何類構造函數。在使用設計模式(DesignPattern)的場合,如果用Factory模式創建對象,則改用clone()方法創建新的對象實例非常簡單。二、使用非阻塞I/O版本較低的JDK不支持非阻塞I/OAPI。為避免I/O阻塞,一些應用采用了創建大量線程的辦法(在較好的情況下,會使用一個緩沖池)。這種技術可以在許多必須支持并發I/O流的應用中見到,如Web服務器、報價和拍賣應用等。然而,創建Java線程需要相當可觀的開銷。JDK1.4引入了非阻塞的I/O庫(java.nio)。如果應用要求使用版本較早的JDK,需要支持非阻塞I/O的軟件包。三、慎用異常異常對性能不利。拋出異常首先要創建一個新的對象。Throwable接口的構造函數調用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調用跟蹤信息。只要有異常被拋出,VM就必須調整調用堆棧,因為在處理過程中創建了一個新的對象。異常只能用于錯誤處理,不應該用來控制程序流程。四、不要重復初始化變量默認情況下,調用類的構造函數時,Java會把變量初始化成確定的值:所有的對象被設置成null,整數變量(byte、short、int、long)設置成0,float和double變量設置成0.0,邏輯值設置成false。當一個類從另一個類派生時,這一點尤其應該注意,因為用new關鍵詞創建一個對象時,構造函數鏈中的所有構造函數都會被自動調用。五、盡量指定類的final修飾符帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String。為String類指定final防止了人們覆蓋length()方法。另外,如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使性能平均提高50%。六、盡量使用局部變量調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧(Stack)中,速度較快。其他變量,如靜態變量、實例變量等,都在堆(Heap)中創建,速度較慢。另外,依賴于具體的編譯器/JVM,局部變量還可能得到進一步優化,望采納,謝謝。

樂都網站制作公司哪家好,找創新互聯建站!從網頁設計、網站建設、微信開發、APP開發、自適應網站建設等網站項目制作,到程序開發,運營維護。創新互聯建站從2013年創立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯建站。

如何優化java程序設計和編碼,提高java性能

 下面給你提供一些在JAVA程序的設計和編碼中,經常采用的一些方法和技巧,可以提高JAVA程序的性能:

1.對象的生成和大小的調整。

JAVA程序設計中一個普遍的問題就是沒有好好的利用JAVA語言本身提供的函數,從而常常會生成大量的對象(或實例)。由于系統不僅要花時間生成對象,以后可能還需花時間對這些對象進行垃圾回收和處理。因此,生成過多的對象將會給程序的性能帶來很大的影響。

例1:關于String ,StringBuffer,+和append

JAVA語言提供了對于String類型變量的操作。但如果使用不當,會給程序的性能帶來影響。如下面的語句:

String name=new String("HuangWeiFeng");

System.out.println(name+"is my name");

看似已經很精簡了,其實并非如此。為了生成二進制的代碼,要進行如下的步驟和操作:

(1) 生成新的字符串 new String(STR_1);

(2) 復制該字符串;

(3) 加載字符串常量"HuangWeiFeng"(STR_2);

(4) 調用字符串的構架器(Constructor);

(5) 保存該字符串到數組中(從位置0開始);

(6) 從java.io.PrintStream類中得到靜態的out變量;

(7) 生成新的字符串緩沖變量new StringBuffer(STR_BUF_1);

(8) 復制該字符串緩沖變量;

(9) 調用字符串緩沖的構架器(Constructor);

(10) 保存該字符串緩沖到數組中(從位置1開始);

(11) 以STR_1為參數,調用字符串緩沖(StringBuffer)類中的append方法;

(12) 加載字符串常量"is my name"(STR_3);

(13) 以STR_3為參數,調用字符串緩沖(StringBuffer)類中的append方法;

(14) 對于STR_BUF_1執行toString命令;

(15) 調用out變量中的println方法,輸出結果。

由此可以看出,這兩行簡單的代碼,就生成了STR_1,STR_2,STR_3,STR_4和STR_BUF_1五個對象變量。這些生成的類的實例一般都存放在堆中。堆要對所有類的超類,類的實例進行初始化,同時還要調用類極其每個超類的構架器。而這些操作都是非常消耗系統資源的。因此,對對象的生成進行限制,是完全有必要的。

經修改,上面的代碼可以用如下的代碼來替換。

StringBuffer name=new StringBuffer("HuangWeiFeng");

System.out.println(name.append("is my name.").toString());

系統將進行如下的操作:

(1) 生成新的字符串緩沖變量new StringBuffer(STR_BUF_1);

(2) 復制該字符串緩沖變量;

(3) 加載字符串常量"HuangWeiFeng"(STR_1);

(4) 調用字符串緩沖的構架器(Constructor);

(5) 保存該字符串緩沖到數組中(從位置1開始);

(6) 從java.io.PrintStream類中得到靜態的out變量;

(7) 加載STR_BUF_1;

(8) 加載字符串常量"is my name"(STR_2);

(9) 以STR_2為參數,調用字符串緩沖(StringBuffer)實例中的append方法;

(10) 對于STR_BUF_1執行toString命令(STR_3);

(11)調用out變量中的println方法,輸出結果。

由此可以看出,經過改進后的代碼只生成了四個對象變量:STR_1,STR_2,STR_3和STR_BUF_1.你可能覺得少生成一個對象不會對程序的性能有很大的提高。但下面的代碼段2的執行速度將是代碼段1的2倍。因為代碼段1生成了八個對象,而代碼段2只生成了四個對象。

代碼段1:

String name= new StringBuffer("HuangWeiFeng");

name+="is my";

name+="name";

代碼段2:

StringBuffer name=new StringBuffer("HuangWeiFeng");

name.append("is my");

name.append("name.").toString();

因此,充分的利用JAVA提供的庫函數來優化程序,對提高JAVA程序的性能時非常重要的.其注意點主要有如下幾方面;

(1) 盡可能的使用靜態變量(Static Class Variables)

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

例:

public class foo

{

SomeObject so=new SomeObject();

}

就可以定義為:

public class foo

{

static SomeObject so=new SomeObject();

}

(2) 不要對已生成的對象作過多的改變。

對于一些類(如:String類)來講,寧愿在重新生成一個新的對象實例,而不應該修改已經生成的對象實例。

例:

String name="Huang";

name="Wei";

name="Feng";

上述代碼生成了三個String類型的對象實例。而前兩個馬上就需要系統進行垃圾回收處理。如果要對字符串進行連接的操作,性能將得更差,因為系統將不得為此生成更多得臨時變量,如上例1所示。

(3) 生成對象時,要分配給它合理的空間和大小JAVA中的很多類都有它的默認的空間分配大小。對于StringBuffer類來講,默認的分配空間大小是16個字符。如果在程序中使用StringBuffer的空間大小不是16個字符,那么就必須進行正確的初始化。

(4) 避免生成不太使用或生命周期短的對象或變量。對于這種情況,因該定義一個對象緩沖池。以為管理一個對象緩沖池的開銷要比頻繁的生成和回收對象的開銷小的多。

(5) 只在對象作用范圍內進行初始化。JAVA允許在代碼的任何地方定義和初始化對象。這樣,就可以只在對象作用的范圍內進行初始化。從而節約系統的開銷。

例:

SomeObject so=new SomeObject();

If(x==1) then

{

Foo=so.getXX();

}

可以修改為:

if(x==1) then

{

SomeObject so=new SomeObject();

Foo=so.getXX();

}

2.異常(Exceptions)

JAVA語言中提供了try/catch來發方便用戶捕捉異常,進行異常的處理。但是如果使用不當,也會給JAVA程序的性能帶來影響。因此,要注意以下兩點:

(1) 避免對應用程序的邏輯使用try/catch

如果可以用if,while等邏輯語句來處理,那么就盡可能的不用try/catch語句。

(2) 重用異常

在必須要進行異常的處理時,要盡可能的重用已經存在的異常對象。以為在異常的處理中,生成一個異常對象要消耗掉大部分的時間。

3. 線程(Threading)

一個高性能的應用程序中一般都會用到線程。因為線程能充分利用系統的資源。在其他線程因為等待硬盤或網絡讀寫而 時,程序能繼續處理和運行。但是對線程運用不當,也會影響程序的性能。

例2:正確使用Vector類

Vector主要用來保存各種類型的對象(包括相同類型和不同類型的對象)。但是在一些情況下使用會給程序帶來性能上的影響。這主要是由Vector類的兩個特點所決定的。第一,Vector提供了線程的安全保護功能。即使Vector類中的許多方法同步。但是如果你已經確認你的應用程序是單線程,這些方法的同步就完全不必要了。第二,在Vector查找存儲的各種對象時,常常要花很多的時間進行類型的匹配。而當這些對象都是同一類型時,這些匹配就完全不必要了。因此,有必要設計一個單線程的,保存特定類型對象的類或集合來替代Vector類.用來替換的程序如下(StringVector.java):

public class StringVector

{

private String [] data;

private int count;

public StringVector()

{

this(10); // default size is 10

}

public StringVector(int initialSize)

{

data = new String[initialSize];

}

public void add(String str)

{

// ignore null strings

if(str == null) { return; }

ensureCapacity(count + 1);

data[count++] = str;

}

private void ensureCapacity(int minCapacity)

{

int oldCapacity = data.length;

if (minCapacity oldCapacity)

{

String oldData[] = data;

int newCapacity = oldCapacity * 2;

data = new String[newCapacity];

System.arraycopy(oldData, 0, data, 0, count);

}

}

public void remove(String str)

{

if(str == null) { return; // ignore null str }

for(int i = 0; i count; i++)

{

// check for a match

if(data[i].equals(str))

{

System.arraycopy(data,i+1,data,i,count-1); // copy data

// allow previously valid array element be gc′d

data[--count] = null;

return;

}

}

}

public final String getStringAt(int index)

{

if(index 0) { return null; }

else if(index count) { return null; // index is # strings }

else { return data[index]; // index is good }

}

}

因此,代碼:

Vector Strings=new Vector();

Strings.add("One");

Strings.add("Two");

String Second=(String)Strings.elementAt(1);

可以用如下的代碼替換:

StringVector Strings=new StringVector();

Strings.add("One");

Strings.add("Two");

String Second=Strings.getStringAt(1);

這樣就可以通過優化線程來提高JAVA程序的性能。用于測試的程序如下(TestCollection.java):

import java.util.Vector;

public class TestCollection

{

public static void main(String args [])

{

TestCollection collect = new TestCollection();

if(args.length == 0)

{

System.out.println("Usage: java TestCollection [ vector | stringvector ]");

System.exit(1);

}

if(args[0].equals("vector"))

{

Vector store = new Vector();

long start = System.currentTimeMillis();

for(int i = 0; i 1000000; i++)

{

store.addElement("string");

}

long finish = System.currentTimeMillis();

System.out.println((finish-start));

start = System.currentTimeMillis();

for(int i = 0; i 1000000; i++)

{

String result = (String)store.elementAt(i);

}

finish = System.currentTimeMillis();

System.out.println((finish-start));

}

else if(args[0].equals("stringvector"))

{

StringVector store = new StringVector();

long start = System.currentTimeMillis();

for(int i = 0; i 1000000; i++) { store.add("string"); }

long finish = System.currentTimeMillis();

System.out.println((finish-start));

start = System.currentTimeMillis();

for(int i = 0; i 1000000; i++) {

String result = store.getStringAt(i);

}

finish = System.currentTimeMillis();

System.out.println((finish-start));

}

}

}

關于線程的操作,要注意如下幾個方面:

(1) 防止過多的同步

如上所示,不必要的同步常常會造成程序性能的下降。因此,如果程序是單線程,則一定不要使用同步。

(2) 同步方法而不要同步整個代碼段

對某個方法或函數進行同步比對整個代碼段進行同步的性能要好。

(3) 對每個對象使用多”鎖”的機制來增大并發。

一般每個對象都只有一個”鎖”,這就表明如果兩個線程執行一個對象的兩個不同的同步方法時,會發生”死鎖”。即使這兩個方法并不共享任何資源。為了避免這個問題,可以對一個對象實行”多鎖”的機制。如下所示:

class foo

{

private static int var1;

private static Object lock1=new Object();

private static int var2;

private static Object lock2=new Object();

public static void increment1()

{

synchronized(lock1)

{

var1++;

}

}

public static void increment2()

{

synchronized(lock2)

{

var2++;

}

}

}

4.輸入和輸出(I/O)

輸入和輸出包括很多方面,但涉及最多的是對硬盤,網絡或數據庫的讀寫操作。對于讀寫操作,又分為有緩存和沒有緩存的;對于數據庫的操作,又可以有多種類型的JDBC驅動器可以選擇。但無論怎樣,都會給程序的性能帶來影響。因此,需要注意如下幾點:

(1) 使用輸入輸出緩沖

盡可能的多使用緩存。但如果要經常對緩存進行刷新(flush),則建議不要使用緩存。

(2) 輸出流(Output Stream)和Unicode字符串

當時用Output Stream和Unicode字符串時,Write類的開銷比較大。因為它要實現Unicode到字節(byte)的轉換.因此,如果可能的話,在使用Write類之前就實現轉換或用OutputStream類代替Writer類來使用。

(3) 當需序列化時使用transient

當序列化一個類或對象時,對于那些原子類型(atomic)或可以重建的原素要表識為transient類型。這樣就不用每一次都進行序列化。如果這些序列化的對象要在網絡上傳輸,這一小小的改變對性能會有很大的提高。

(4) 使用高速緩存(Cache)

對于那些經常要使用而又不大變化的對象或數據,可以把它存儲在高速緩存中。這樣就可以提高訪問的速度。這一點對于從數據庫中返回的結果集尤其重要。

(5) 使用速度快的JDBC驅動器(Driver)

JAVA對訪問數據庫提供了四種方法。這其中有兩種是JDBC驅動器。一種是用JAVA外包的本地驅動器;另一種是完全的JAVA驅動器。具體要使用哪一種得根據JAVA布署的環境和應用程序本身來定。

5.一些其他的經驗和技巧

(1) 使用局部變量。

(2) 避免在同一個類中動過調用函數或方法(get或set)來設置或調用變量。

(3) 避免在循環中生成同一個變量或調用同一個函數(參數變量也一樣)。

(4) 盡可能的使用static,final,private等關鍵字。

(5) 當復制大量數據時,使用System.arraycopy()命令。

Java應用的五項性能優化技巧?

要想對Java應用代碼進行優化,我們首先需要分析其具體工作原理。事實上,影響性能優化效果的因素多種多樣,我們需要從垃圾回收、操作系統設置以及虛擬機制等多個角度著眼,方可順利完成任務。在今天的文章中,昆明IT培訓將分享五項性能優化技巧,希望能為你的Java應用提升工作帶來啟示。

1.從最小Heap分配入手

2.使用各類Java性能工具

3.使用StringBuilder而非+運算符

4.避免使用迭代器

5.建立更好的并發控制機制

當前標題:高性能java代碼優化器 java代碼優化工具
URL網址:http://www.kartarina.com/article2/dosgdoc.html

成都網站建設公司_創新互聯,為您提供外貿建站網站內鏈、微信小程序、、Google手機網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化
欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线
欧美性猛交xxxx乱大交退制版| 亚洲一区二区中文在线| 欧美日韩一区二区不卡| 日韩美女视频一区二区| 成人黄色av网站在线| 国产精品久久久久影视| 成人中文字幕电影| 国产精品嫩草影院com| 99国产麻豆精品| 亚洲精品久久久蜜桃| 欧美日韩成人激情| 紧缚捆绑精品一区二区| 国产亚洲一区二区三区四区| 成人免费毛片片v| 亚洲综合免费观看高清完整版 | 久久av老司机精品网站导航| 久久婷婷成人综合色| 91视频观看免费| 美腿丝袜亚洲综合| 亚洲乱码中文字幕综合| 日韩欧美成人午夜| 色天天综合久久久久综合片| 免费看欧美美女黄的网站| 国产色综合一区| 制服丝袜日韩国产| 91亚洲精品久久久蜜桃网站 | 国产喷白浆一区二区三区| 在线中文字幕一区二区| 精品午夜一区二区三区在线观看| 最新国产精品久久精品| 精品久久国产字幕高潮| 在线观看成人小视频| 国产999精品久久久久久绿帽| 午夜久久电影网| 亚洲桃色在线一区| 久久精品欧美日韩精品| 91麻豆精品国产91久久久久久久久 | 视频一区二区国产| 亚洲丝袜另类动漫二区| 国产三级精品在线| 久久精子c满五个校花| 欧美一区二区播放| 欧美性极品少妇| 色哟哟在线观看一区二区三区| 国产一区二区三区日韩| 日韩高清不卡一区| 奇米888四色在线精品| 日韩精品乱码av一区二区| 亚洲综合色自拍一区| 亚洲色图都市小说| 亚洲精品成人悠悠色影视| 亚洲欧美在线观看| 亚洲精品videosex极品| 亚洲免费在线观看视频| 亚洲精品免费在线观看| 亚洲一卡二卡三卡四卡| 亚洲成人免费电影| 喷白浆一区二区| 国产精品一区二区三区乱码 | 午夜国产精品一区| 日本在线观看不卡视频| 精品一区二区三区免费| 国产在线视视频有精品| 国产精品羞羞答答xxdd| 盗摄精品av一区二区三区| av福利精品导航| 91福利精品视频| 欧美精品久久99| 精品国产乱码久久| 国产精品国产三级国产aⅴ中文| 国产欧美中文在线| 亚洲男人天堂av网| 日本一道高清亚洲日美韩| 国内成+人亚洲+欧美+综合在线| 国产一区二区三区久久悠悠色av| 国产精品99久久久久久有的能看| 国产suv精品一区二区883| 北岛玲一区二区三区四区| 91网站在线播放| 在线观看91精品国产麻豆| 久久久精品国产99久久精品芒果| 国产精品欧美一级免费| 亚洲一区二区三区小说| 韩国v欧美v亚洲v日本v| 91麻豆免费在线观看| 日韩三级在线免费观看| 中文字幕第一区第二区| 亚州成人在线电影| 懂色av中文一区二区三区| 欧美日韩精品欧美日韩精品一综合| 日韩一区二区三区视频在线 | 一区二区三区国产| 国精产品一区一区三区mba视频| www.欧美.com| 制服丝袜中文字幕一区| 成人欧美一区二区三区视频网页| 午夜久久久影院| www.亚洲精品| 精品成a人在线观看| 亚洲香肠在线观看| eeuss鲁一区二区三区| 日韩欧美国产三级| 亚洲精品日韩一| 高清国产午夜精品久久久久久| 欧美日免费三级在线| 久久久久久亚洲综合| 亚洲精品久久嫩草网站秘色| 免费看欧美女人艹b| 日本精品一级二级| 国产日韩精品视频一区| 久久机这里只有精品| 欧美剧情片在线观看| 夜夜嗨av一区二区三区网页| 丰满放荡岳乱妇91ww| 精品国产伦一区二区三区观看方式| 亚洲黄色在线视频| 91在线porny国产在线看| 久久婷婷成人综合色| 免费成人在线观看| 欧美一区二视频| 婷婷中文字幕综合| 在线一区二区观看| 亚洲精品少妇30p| 91色porny在线视频| 17c精品麻豆一区二区免费| 成人一级片在线观看| 国产欧美视频在线观看| 国产精品456| 国产精品日韩成人| 成人免费精品视频| 中文字幕免费在线观看视频一区| 国产一区二区在线观看视频| 精品国产污污免费网站入口| 久久成人羞羞网站| 亚洲精品一线二线三线| 国内不卡的二区三区中文字幕| 欧美α欧美αv大片| 国产在线视视频有精品| 国产三级精品三级在线专区| 粉嫩蜜臀av国产精品网站| 国产日韩在线不卡| 一本久久综合亚洲鲁鲁五月天 | 久久一留热品黄| 成人综合在线网站| 亚洲三级在线观看| 欧美日韩二区三区| 美日韩一级片在线观看| 久久婷婷一区二区三区| 成人高清av在线| 亚洲一区二区影院| 91精品国产黑色紧身裤美女| 蜜桃久久久久久| 久久精品亚洲精品国产欧美| 国产成人av一区| 亚洲品质自拍视频网站| 在线观看欧美日本| 久久国产精品色| 国产精品免费视频一区| 欧美唯美清纯偷拍| 国模无码大尺度一区二区三区| 国产欧美日韩不卡| 欧美色图12p| 国内精品国产成人| 一区二区三区蜜桃| 日韩欧美一二区| jlzzjlzz亚洲日本少妇| 午夜精品久久久久久| 国产亚洲欧美日韩在线一区| 91福利视频久久久久| 精品综合免费视频观看| 亚洲免费在线视频| 久久久久一区二区三区四区| 在线中文字幕一区二区| 国模一区二区三区白浆| 玉米视频成人免费看| 精品久久国产字幕高潮| 欧洲亚洲精品在线| 成人性生交大片免费看中文| 同产精品九九九| 亚洲免费电影在线| 国产欧美精品国产国产专区 | 欧美mv和日韩mv的网站| 国精产品一区一区三区mba视频 | 成人性生交大片免费看视频在线 | 欧美日韩和欧美的一区二区| 国产精品影音先锋| 午夜激情久久久| 亚洲精品免费在线观看| 中文成人av在线| 亚洲精品在线观看网站| 91国偷自产一区二区三区成为亚洲经典 | 一区二区三区四区不卡在线 | 国产亚洲制服色| 欧美一区二区播放| 在线免费精品视频| 成人18视频在线播放| 成人美女视频在线看| 国产成人综合视频| 狠狠久久亚洲欧美| 九一久久久久久|