欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

Java編程

當(dāng)前位置:主頁 > 軟件編程 > Java編程 >

Java編程代碼性能優(yōu)化

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:Java編程|點(diǎn)擊: 次

一、咱們之所以這么干的目的:  

  1.效率(最重要)

  2.可讀性,便于后期維護(hù)。(同樣很重要)

二、代碼優(yōu)化的要求:

  1.減小代碼的體積。

  2.提高代碼的運(yùn)行效率。

三、常用的代碼的優(yōu)化:

  1、盡量重用對象 :

    特別是String對象的重用。最常用的就是字符串的拼接:

        當(dāng)遇到頻繁擦拼接String時(shí)。記住一定用StringBuilder/StringBuffer

    例如:

  ArrayList<String> list;
  //省去list初始化。
  StringBuilder builder = new StringBuilder(); 
  for (String s : list) {
    builder.append(s);
  }
  String result = builder.toString();

    原因:Java虛擬機(jī)不僅要花時(shí)間生成對象,而且還要花時(shí)間處理和回收對象,生成過多對象必定會給程序性能帶來影響。

  2. 盡可能使用局部變量 :

    局部變量在棧中創(chuàng)建,創(chuàng)建速度快,用完即自動消失,不需要額外的垃圾回收。

    而靜態(tài)變量、實(shí)例變量等在堆中創(chuàng)建,創(chuàng)建速度慢,同時(shí)還依賴Java垃圾回收機(jī)制處理。

  3. 及時(shí)關(guān)閉流 :

    Java程序開發(fā)中,在對I/O,數(shù)據(jù)庫操作結(jié)束后,一定要記住關(guān)閉流。

    原因:未關(guān)閉流會對系統(tǒng)造成很大的開銷,甚至?xí)?shù)據(jù)造成嚴(yán)重的后果。

  4. 使用懶加載

    懶加載 : 當(dāng)要用的時(shí)候才創(chuàng)建該對象。

    例如:

  String prefix = "gebi";
  if ("laowang".equals(name)) {
    list.add(prefix + name);
  }

           替換為:

  if("laowang".equals(name)) {
    String prefix = "gebi";
    list.add(prefix + name);
  }

  5.避免在循環(huán)中使用try...catch,在循環(huán)外層使用try...catch

  6.try...catch不宜太大。

    不要將無用代碼,即不會拋出異常的代碼統(tǒng)統(tǒng)放入try...catch塊中,減小try...catch代碼塊的大小。

    保證代碼的可讀性,易維護(hù)性,健壯性。

  7.循環(huán)內(nèi)盡量避免創(chuàng)建對象的引用。

    尤其是循環(huán)量大的時(shí)候。

  while (i<1000) {
    Object object = new Object();
  }

            建議修改為:

  Object object = null;
  while (i<1000) {
    object = new Object();

    每次new Object()的時(shí)候,Object對象引用指向Object對象。

    當(dāng)循環(huán)次數(shù)多的時(shí)候,如第一種,JVM會創(chuàng)建1000個(gè)對象的引用,而第二種內(nèi)存中只有一份Object對象引用。這樣就大大節(jié)省了內(nèi)存空間了。

  8.不要隨意使用static變量。

    當(dāng)對象被聲明為static的變量所引用時(shí),此時(shí),Java垃圾回收器不會清理這個(gè)對象所占用的堆內(nèi)存。

    靜態(tài)變量所占用的堆內(nèi)存直到該變量所在類所在程序結(jié)束才被釋放。 即靜態(tài)變量生命周期=類生命周期。

  9.不要創(chuàng)建一些不使用的對象,不要導(dǎo)入一些不使用的類。

  10.使用帶緩沖的I/O流:

    帶緩沖的I/O流可以極大提高I/O效率。BufferedWriter, BufferedReader, BufferedInputStream, BufferedOutputStream。

  11.包裝類數(shù)據(jù)轉(zhuǎn)換為字符串使用: toString  

    Integer i = 1;

     包裝類數(shù)據(jù)轉(zhuǎn)換為字符串方法速度排名 :

       i.toString > String.valueOf(i) > "" + i 

  12.Map遍歷效率 : entrySet > keySet

  //entrySet()
  for (Entry<String, String> entry : map.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " : " + value);
  }
  
  //上下對比
  
  //keySet()
  for (String key : map.keySet()) {
  String value = map.get(key);
  System.out.println(key + " : " + value);
  } 

  13.關(guān)于Iterator與forEach()的集合遍歷舍取。

    算法導(dǎo)論上說:算法是為了提高空間效率和時(shí)間效率。但往往時(shí)間和空間不能并存。

    時(shí)間效率:Iterator > forEach()

    代碼可讀性 : forEach() > Iterator

  //Iterator
  Set<Entry<String, String>> entrySet = map.entrySet();
  Iterator<Entry<String, String>> iter = entrySet.iterator();
   
  while (iter.hasNext()) {
    Entry<String, String> entry = iter.next();
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " : " + value);
   } 

    對比:

  //forEach()
  for (Entry<String, String> entry : map.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " : " + value);
  }

            個(gè)人認(rèn)為:當(dāng)處理大數(shù)據(jù)時(shí)推薦使用Iterator遍歷集合。

         但處理小數(shù)據(jù)的話,為了可讀性和后期維護(hù)還是使用forEach()。

         兩者結(jié)合使用,都應(yīng)該掌握。

上一篇:詳解Http請求中Content-Type講解以及在Spring MVC中的應(yīng)用

欄    目:Java編程

下一篇:Java使用默認(rèn)瀏覽器打開指定URL的方法(二種方法)

本文標(biāo)題:Java編程代碼性能優(yōu)化

本文地址:http://mengdiqiu.com.cn/a1/Javabiancheng/8487.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有