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

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

Java極度性能調整

2019-11-18 12:21:16
字體:
來源:轉載
供稿:網友

  有很多介紹基本的java應用性能調整的文章。他們都討論些簡單的技術,諸如使用StringBuffer而不用String,使用synchronized要害字的開銷等等。
  
  這篇文章不再介紹這些東西。相反,我們關注能幫助你的基于Web的應用更快、可升級型更好的技巧。一些技巧很具體,其他的相對簡短,但所有的都很有用。最后以一些你可提供給你的治理者的建議結束。
  
  我寫這篇文章的靈感來自于當我的同事和我一起回憶我們的.com(dot-com)時代的時候——我們如何設計能支持成千上萬的用戶和擁有緊密代碼的系統,我們如何對有侵略性的致命打擊。有時在為復用設計和為性能設計之間有一個權衡。基于我的情況,性能每次都獲勝。即使你的商務顧客無需理解代碼復用,但是他們知道快速(fast-performing)的系統是怎么回事。讓我們開始看看我們的技巧。
  
  如何使用Exception
  Exception降低性能。一個異常拋出首先需要創建一個新的對象。Throwable接口中的構造器調用名為fillInStackTrace()的本地方法。這個方法負責巡檢棧的整個框架來收集跟蹤信息。這樣無論何時有異常拋出,它要求虛擬機裝載調用棧,因為一個新的對象在中部被創建。
  
  異常應當僅用于有錯誤發生時,而不要控制流。
  
  我有機會在一個專門用于無線內容市場的網站(名字故意隱去了)看到一段代碼,其中開發者完全可以使用一個簡單的對照來查看對象是否為空。相反,他或她跳過了這個檢查而實際上拋出Null-PointerException。
  
  不要兩次初始化變量
  Java通過調用獨特的類構造器默認地初始化變量為一個已知的值。所有的對象被設置成null,integers (byte, short, int, long)被設置成0,float和double設置成0.0,Boolean變量設置成false。這對那些擴展自其它類的類尤其重要,這跟使用一個新的要害詞創建一個對象時所有一連串的構造器被自動調用一樣。
  
  對新的要害詞使用優選法則
  正如前面提到的,通過使用一個新的要害詞創建一個類的實例,在這個鏈中的所有構造器將被調用。假如你需要創建一個類的新實例,你可以使用一個實現了cloneable接口的對象的clone()方法。該clone方法不調用任何類的構造器。
  
  假如你已經使用了設計模式作為你的體系結構的一部分,并且使用了工廠模式創建對象,變化會很簡單。下面所列是工廠模式的典型實現。
  
  public static Account getNewAccount() {
  return new Account();
  }
  
  使用了clone方法的refactored代碼看起來可能像下面這樣:
  
  PRivate static Account BaseAccount = new Account();
  public static Account getNewAccount() {
    return (Account) BaseAccount.clone();
  }
  
  以上的思路對實現數組同樣有用。
  
  假如你在應用中沒有使用設計模式,我建議你停止讀這篇文章,趕緊跑到(不要走)書店挑一本四人著的《設計模式》。
  
  在任何可能的地方讓類為Final
  標記為final的類不能被擴展。在《核心Java API》中有大量這個技術的例子,諸如java.lang.String。將String類標記為final阻止了開發者創建他們自己實現的長度方法。
  
  更深入點說,假如類是final的,所有類的方法也是final的。Java編譯器可能會內聯所有的方法(這依靠于編譯器的實現)。在我的測試里,我已經看到性能平均增加了50%。
  
  在任何可能的地方使用局部變量
  屬于方法調用部分的自變量和聲明為此調用一部分的臨時變量存儲在棧中,這比較快。諸如static,實例(instance)變量和新的對象創建在堆中,這比較慢。局部變量的更深入優化依靠于你正在使用的編譯器或虛擬機。
  
  使用Nonblocking I/O
  當前的JDK版本不支持nonblocking I/O API,很多應用試圖通過創建大量的線程(目光長遠得用在池中)來避免阻塞。正如前述,在Java中創建線程有嚴重的開銷。
  
  典型的你可能看到應用中實現的線程需要支持并發I/O流,像Web 服務器,并quote and aUCtion components.
  
  JDK1.4介紹了一個nonblocking I/O包(java.nio)。假如你必須保留在較早版本的JDK,有添加了支持nonblocking I/O的第三方包。
  
 ?。簑ww.cs.berkeley.edu/~mdw/proj/java-nbio/download.Html.
  
  停止小聰明
  很多開發人員在腦子中編寫可復用和靈活的代碼,而有時候在他們的程序中就產生額外的開銷。曾經或者另外的時候他們編寫了類似這樣的代碼:
  
  public void doSomething(File file) {
  FileInputStream fileIn = new FileInputStream(file);
  // do something
  
  他夠靈活,但是同時他們也產生了更多的開銷。這個主意背后做的事情是操縱一個InputStream,而不是一個文件,因此它應該重寫如下:
  
  public void doSomething(InputStream inputStream){
  // do something
  
  乘法和除法
  我有太多的東東適用于摩爾法則——它聲明CPU功率每年成倍增長。"摩爾法則"表明每年由開發者所寫的差勁的代碼數量三倍增加,劃去了摩爾法則的任何好處。
  
  考慮下面的代碼:
  
  for (val = 0; val < 100000; val +=5) { shiftX = val * 8; myRaise = val * 2; }
  
  假如我們狡猾的利用位移(bit),性能將會六倍增加。這是重寫的代碼:
  
  for (val = 0; val < 100000; val += 5) { shiftX = val << 3; myRaise = val << 1; }
  
  代替了乘以8,我們使用同等效果的左移3位。每一個移動相當于乘以2,變量myRaise對此做了證實。同樣向右移位相當于除以2,當然這會使執行速度加快,但可能會使你的東東以后難于理解;所以這只是個建議。
  
  選擇一個基于垃圾收集實現的虛擬機
  許多人可能會對Java規范不需要實現垃圾收集感到驚奇。設想時代已經是我們都擁有無限內存計算機??傊占魅粘J聞站褪秦撠煱l現和拋出(hence garbage)不再需要的對象。垃圾收集必須發現那些對象不再被程序指向,并且使被對象占用的棧內存被釋放掉。它還負責運行任何被釋放對象的finalizer。
  
  垃圾收集故意不答應你釋放并非由你分配的內存,從而幫助你確保程序完整,當JVM確定CPU時間的時間表并且當垃圾收集器運行時,這個進程也產生開銷。
  
  垃圾收集器有兩個不同的步驟執行他們的工作。
  
  實現了定位計算的垃圾收集器在棧中為每一個對象保留一個計數。當一個對象被創建并且對它的一個定位被分配給一個變量,計數增加。當對象越出范圍,定位計數被設置成0并且對象可以被垃圾收集。這個步驟答應參考計數器運行在與程序執行有關的短時間增量內。定位計數在父子彼此擁有定位的應用里運行不正常。每次一個對象刷新時也會有定位計數增加和減少的開銷。
  
  實現了跟蹤的垃圾收集器從根節點開始跟蹤一列定位。對象發現跟蹤是否被標記。在這個過程完成后,知道不可達的任何沒標記的對象可以被垃圾收集。這可能以位圖(bitmap)形式實現或者在對象中被設置標志。此技術參考"Mark and Sweep."(reference:定位,翻譯成“指向”似乎更輕易理解,是Java語言對在用對象的一個跟蹤指針。譯者著)
  
  給你的治理人員提建議
  其他方法可被用來使你的基于Web的應用更快并且更可升級??蓪崿F的最簡單的技術通常是支持cluster的策略。使用cluster,一組服務器能夠一起透明的提供服務。多數應用服務器答應你獲得cluster支持而不需要改變你的應用——一個大的勝利。
  
  當然在執行此步驟之前你可能需要考慮來自你使用的應用服務器提供商附加的許可權利。
  
  當看到cluster策略會有許多額外的事情考慮。經常在體系結構中產生的一個缺點是擁有有狀態會話。假如cluster中的一個服務器或者進程當掉,cluster會舍棄整個應用。為防止此類事情發生,cluster必須給cluster中的所有成員不斷復制會話Bean的狀態。確保你也限制了存儲在會話中的對象的大小和數量,因為這些也需要被復制。
  
  Cluster也答應你分期度量你的Web站點的部分。假如你需要度量靜態部分,你可以添加Web服務器。假如你需要度量動態生成的部分,你可以添加應用服務器。
  
  在你已經把你的系統放入cluster后,下一個讓你的應用跑得更快的建議步驟是選擇一個更好的虛擬機??纯碒otspot虛擬機或者其他的飛速發展中的執行優化的虛擬機。隨同虛擬機,看看更好的編譯器是一個更好的主意。
  
  假如你使用了幾個這兒提到的行業技術插件,并且仍然不能獲得你要的可升級性和高可用性,那么我建議一個可靠的調試策略。策略的第一步是為可能的瓶頸檢查整個體系結構。通常,這在你的作為單線程組件或者有很多輔助連接線組件的UML流圖中很輕易識別出來。
  
  最后的步驟是產生一個整個代碼的具體性能估價。
  
  確保你的治理人員至少為此安排了整個項目時間的20%;否則不足的時間可能不止危及你整個成功的安全,還會導致你向系統引入新的缺點。
  
  許多組織者在適當的位置沒有嚴格意義的測試基礎而歸咎于成本考慮也是錯誤的。確保你的QA環境真實反映你的生產環境,并且你的QA測試考慮以不同的負載測試應用,包括在最大的預期并發用戶時一個基于低負載和一個完全負載的測試。
  
  性能測試,有時測試一個系統的穩定性,可能需要在天天,甚至每周的整個時期的不同關節都運行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕欧美视频在线| 亚洲一区二区日本| 午夜精品久久久久久久男人的天堂| 中文字幕av一区二区三区谷原希美| 亚洲欧美精品一区| 精品日韩视频在线观看| 国产精品观看在线亚洲人成网| 日韩av123| 午夜精品久久久久久久白皮肤| 欧美成人精品h版在线观看| 日韩av日韩在线观看| 欧美日韩成人在线观看| 亚洲精品国产精品国产自| 日韩网站免费观看高清| 精品国偷自产在线视频| 国产中文日韩欧美| 久久精品影视伊人网| 久久久成人精品| 亚洲精品一区中文字幕乱码| 欧美乱妇40p| 97视频人免费观看| 欧美极品少妇xxxxⅹ喷水| 亚洲色图日韩av| 中文字幕久久久av一区| 日韩在线观看高清| 亚洲色图25p| 亚洲国产精品久久91精品| 日韩激情av在线免费观看| 欧美日韩国产999| 色无极亚洲影院| 日韩精品在线视频| 亚洲精品国产精品国自产观看浪潮| 91精品视频专区| 中文日韩在线视频| 国产精品视频内| 亚洲福利在线播放| 日韩成人av一区| 成人av电影天堂| 欧美天堂在线观看| 日韩国产欧美区| 欧美裸体男粗大视频在线观看| 成人黄色av免费在线观看| 欧美午夜xxx| 亚洲最新中文字幕| 色婷婷综合久久久久中文字幕1| 日本中文字幕不卡免费| 91色在线观看| 日本亚洲精品在线观看| 亚洲在线观看视频| 欧美日韩精品国产| 欧美国产高跟鞋裸体秀xxxhd| 国产精品情侣自拍| 日韩精品免费在线视频观看| 欧美壮男野外gaytube| 亚洲国产中文字幕久久网| 91av在线影院| 欧美在线视频一区| 亚洲男人7777| 亚洲精品成a人在线观看| 91夜夜揉人人捏人人添红杏| 中文字幕亚洲字幕| 欧美xxxx18国产| 亚洲第一福利网站| 亚洲bt天天射| 国产成人亚洲综合91| 国产精品久久久久久久久久东京| 日韩av免费看| 91黄色8090| 欧美丰满少妇xxxxx| 日韩欧美精品网址| 97视频在线观看网址| 欧美日韩一区二区免费视频| 精品国产网站地址| 日韩精品免费在线视频观看| 九九热r在线视频精品| 亚洲美女精品成人在线视频| 欧美亚洲成人精品| 亚洲精品一区中文字幕乱码| 欧美日韩国产999| 亚洲精品久久久久久久久久久| 亚洲一区二区三区成人在线视频精品| 亚洲成人黄色网| 欧美日韩裸体免费视频| 精品日本高清在线播放| 91精品久久久久久久久久久久久久| 久久精品国亚洲| 日本视频久久久| 成人h片在线播放免费网站| 免费不卡在线观看av| 亚洲乱码国产乱码精品精| 欧美成人黑人xx视频免费观看| 久久激情视频免费观看| 欧美wwwwww| 国产精品一区二区三区在线播放| 亚洲成人网在线| 成人免费激情视频| 国产美女精品免费电影| 日韩成人av在线| 黑人巨大精品欧美一区二区一视频| 欧美风情在线观看| 中文字幕久精品免费视频| www.久久久久久.com| 尤物九九久久国产精品的特点| 亚洲aaaaaa| 中文字幕一区二区精品| 亚洲一区久久久| 亚洲精品98久久久久久中文字幕| 午夜精品一区二区三区av| 久久久精品视频成人| 国产成人91久久精品| 欧美在线性视频| 国产亚洲欧洲高清一区| 97国产suv精品一区二区62| 中文字幕欧美日韩在线| 日韩成人免费视频| 国产精品丝袜久久久久久不卡| 国产亚洲精品美女久久久久| 成人伊人精品色xxxx视频| 日本午夜在线亚洲.国产| 国内精品小视频| 国产成人av在线播放| 2018中文字幕一区二区三区| 一个人www欧美| 国产精品扒开腿做爽爽爽的视频| 欧美激情啊啊啊| 在线观看欧美日韩| 91免费福利视频| 91亚洲精品在线观看| 国产欧美一区二区三区四区| 亚洲精品在线不卡| 欧美电影在线观看高清| 91精品国产91久久久久久| 中文字幕一区二区三区电影| 久久久久久久久久国产| 欧美日本中文字幕| 国产又爽又黄的激情精品视频| 中文字幕亚洲一区二区三区五十路| 欧美激情免费视频| 日韩电影免费在线观看中文字幕| 亚洲人a成www在线影院| 亚洲精品suv精品一区二区| 成人免费淫片视频软件| 国产精品啪视频| 懂色av影视一区二区三区| 午夜精品久久久久久久久久久久久| 97欧美精品一区二区三区| 91网站免费看| 曰本色欧美视频在线| 欧美日韩国产成人在线观看| 国内精品小视频在线观看| 午夜精品一区二区三区视频免费看| 国产亚洲激情视频在线| 曰本色欧美视频在线| 欧美大尺度在线观看| x99av成人免费| 91久久久亚洲精品| 精品视频久久久| 成人久久久久久久| 热久久这里只有| 欧美老少做受xxxx高潮| 久久精品中文字幕一区| 992tv成人免费视频| 欧美肥婆姓交大片| 亚洲性线免费观看视频成熟|