亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

java性能優化-之二

2019-11-18 13:17:19
字體:
來源:轉載
供稿:網友

  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 }
  }
  /* * * * * * * * * * * * * * * *StringVector.java * * * * * * * * * * * * * * * * */
  因此,代碼:
  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));
  }
  }
  }
  /* * * * * * * * * * * * * * * *TestCollection.java * * * * * * * * * * * * * * * * */
  測試的結果如下(假設標準的時間為1,越小性能越好):
  
  
  關于線程的操作,要注重如下幾個方面?!?br />  (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()命令。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区日韩| 日韩av三级在线观看| 亚洲国产成人精品久久久国产成人一区| 国产精品免费在线免费| 按摩亚洲人久久| 一区二区三区动漫| 欧美黑人xxx| 国产精品九九九| 久久高清视频免费| 欧美精品videos另类日本| 91chinesevideo永久地址| 日韩精品中文字幕视频在线| 成人激情黄色网| 亚洲精品电影网在线观看| 国产女人18毛片水18精品| 欧美激情性做爰免费视频| 成人激情视频在线播放| 日韩有码在线电影| 成人精品久久一区二区三区| 久久久精品国产亚洲| 国产精品一区二区三区久久| 57pao成人国产永久免费| 国内精品久久久久久| 欧美丰满少妇xxxx| 欧美极品少妇xxxxⅹ裸体艺术| 青青a在线精品免费观看| 亚洲三级黄色在线观看| 国产日韩av在线播放| 中文字幕精品av| 欧美日韩在线另类| 韩国日本不卡在线| 亚洲成av人乱码色午夜| 日韩av一区二区在线观看| 在线成人激情黄色| 97国产精品视频人人做人人爱| 91成人在线播放| 中文字幕亚洲无线码在线一区| 久久久久久久久综合| 成人av番号网| 日本免费一区二区三区视频观看| 久久五月天色综合| 久热精品视频在线观看| 欧美精品在线视频观看| 大量国产精品视频| 国产精品久久电影观看| 成人国产精品一区二区| 欧美视频一区二区三区…| 国产日本欧美视频| 国产精品久久av| 色一区av在线| 欧美日韩黄色大片| 超薄丝袜一区二区| 日韩中文字幕在线精品| 日本精品免费观看| 成人激情视频免费在线| 国产深夜精品福利| 91精品视频在线播放| 久久频这里精品99香蕉| 国产伦精品一区二区三区精品视频| 中文在线资源观看视频网站免费不卡| 欧美成人第一页| 久久成人18免费网站| 亚洲国产精品成人精品| 久久91精品国产| 欧美视频在线免费| 久久精品国产成人| 国产一区二区黑人欧美xxxx| 亚洲欧美中文在线视频| 欧美日韩ab片| 久久夜精品va视频免费观看| 国产精品成人观看视频国产奇米| 亚洲电影免费观看高清完整版在线| 高清在线视频日韩欧美| 欧美激情va永久在线播放| 国产精品久久久久久久av大片| 久久精品夜夜夜夜夜久久| 在线观看国产精品日韩av| 日韩美女av在线免费观看| 午夜精品久久久久久久99热| 国产日韩精品一区二区| 亚洲开心激情网| 国产在线播放不卡| 精品久久久久久久久久久久久久| 日本道色综合久久影院| 国产精品国产亚洲伊人久久| 精品日本美女福利在线观看| 精品国产成人在线| 色中色综合影院手机版在线观看| 亚洲免费中文字幕| 91禁外国网站| 国产精品爽爽爽爽爽爽在线观看| 欧美xxxx做受欧美| 久久国产精品久久国产精品| 国产区亚洲区欧美区| 欧美中文字幕在线| 羞羞色国产精品| 国产精品毛片a∨一区二区三区|国| 97av在线播放| 国产精品视频999| 久久久久久国产精品美女| 欧美亚洲国产成人精品| 亚洲在线一区二区| 午夜精品久久久久久久久久久久| 欧美亚洲伦理www| 91av视频在线播放| 久久成人免费视频| 国产一区二区三区日韩欧美| 97人人爽人人喊人人模波多| 日韩av免费在线播放| 欧美成人剧情片在线观看| 欧美做爰性生交视频| 国产精品久久久久久久久久ktv| 国产精品久久久久一区二区| 国产精品久久久久久久久免费看| 91久久精品国产91久久性色| 久久伊人91精品综合网站| 亚洲国产成人精品女人久久久| 91在线色戒在线| 欧美日韩国产二区| 亚洲成人亚洲激情| 亚洲一区二区三区在线免费观看| 亚洲香蕉av在线一区二区三区| 国产日韩在线亚洲字幕中文| 一区国产精品视频| 欧美国产精品人人做人人爱| 欧美日韩国产中文精品字幕自在自线| 久久久精品国产亚洲| 欧美视频一区二区三区…| 日韩中文视频免费在线观看| 7m第一福利500精品视频| 国产福利成人在线| 日韩精品欧美国产精品忘忧草| 亚洲视频一区二区| 视频直播国产精品| 一二美女精品欧洲| 亚洲嫩模很污视频| 日韩国产激情在线| 欧美日韩一区二区在线| 91精品久久久久久久久久久久久久| 国产成+人+综合+亚洲欧洲| 国产成人精品免费久久久久| 亚洲一区中文字幕| 欧美激情在线有限公司| 欧美人与性动交| 992tv成人免费影院| 亚洲综合中文字幕68页| 日韩精品中文字幕在线观看| 日韩在线视频国产| 97国产suv精品一区二区62| 欧美日韩成人在线播放| 日产精品久久久一区二区福利| 欧美国产日本在线| 国产精品久久久久久久久男| 欧美孕妇毛茸茸xxxx| 97在线视频免费看| 久久亚洲精品毛片| 国产成人精品视| 日韩高清a**址| 欧美高清视频在线播放| 日本欧美在线视频| 久久久久在线观看| 久久久av亚洲男天堂| 欧美成人精品xxx| 午夜精品福利在线观看|