1. 盡量在合適的場合使用單例
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、新田網(wǎng)絡(luò)推廣、微信小程序開發(fā)、新田網(wǎng)絡(luò)營銷、新田企業(yè)策劃、新田品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供新田建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
使用單例可以減輕加載的負(fù)擔(dān),縮短加載的時間,提高加載的效率,但并不是所有地方都適用于單例,簡單來說,單例主要適用于以下三個方面:
第一,控制資源的使用,通過線程同步來控制資源的并發(fā)訪問;
第二,控制實例的產(chǎn)生,以達到節(jié)約資源的目的;
第三,控制數(shù)據(jù)共享,在不建立直接關(guān)聯(lián)的條件下,讓多個不相關(guān)的進程或線程之間實現(xiàn)通信。
2. 盡量避免隨意使用靜態(tài)變量
要知道,當(dāng)某個對象被定義為stataic變量所引用,那么gc通常是不會回收這個對象所占有的內(nèi)存
3. 盡量避免過多過常的創(chuàng)建Java對象
盡量避免在經(jīng)常調(diào)用的方法,循環(huán)中new對象,由于系統(tǒng)不僅要花費時間來創(chuàng)建對象,而且還要花時間對這些對象進行垃圾回收和處理,在我們可以控制的范圍內(nèi),最大限度的重用對象,最好能用基本的數(shù)據(jù)類型或數(shù)組來替代對象。
4. 盡量使用final修飾符
帶有final修飾符的類是不可派生的。在Java核心API中,有許多應(yīng)用final的例子,例如java.lang.String.為String類指定final防止了使用者覆蓋length()方法。另外,如果一個類是final的,則該類所有方法都是final的。Java編譯器會尋找機會內(nèi)聯(lián)(inline)所有的final方法(這和具體的編譯器實現(xiàn)有關(guān))。此舉能夠使性能平均提高50%.
5. 盡量使用局部變量
調(diào)用方法時傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時變量都保存在棧(Stack)中,速度較快。其他變量,如靜態(tài)變量、實例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。
6. 盡量處理好包裝類型和基本類型兩者的使用場所
雖然包裝類型和基本類型在使用過程中是可以相互轉(zhuǎn)換,但它們兩者所產(chǎn)生的內(nèi)存區(qū)域是完全不同的,基本類型數(shù)據(jù)產(chǎn)生和處理都在棧中處理,包裝類型是對象,是在堆中產(chǎn)生實例。
在集合類對象,有對象方面需要的處理適用包裝類型,其他的處理提倡使用基本類型。
7. 慎用synchronized,盡量減小synchronize的方法
都知道,實現(xiàn)同步是要很大的系統(tǒng)開銷作為代價的,甚至可能造成死鎖,所以盡量避免無謂的同步控制。synchronize方法被調(diào)用時,直接會把當(dāng)前對象鎖 了,在方法執(zhí)行完之前其他線程無法調(diào)用當(dāng)前對象的其他方法。所以synchronize的方法盡量小,并且應(yīng)盡量使用方法同步代替代碼塊同步。
8. 盡量使用StringBuilder和StringBuffer進行字符串連接
這個就不多講了。
9. 盡量不要使用finalize方法
實際上,將資源清理放在finalize方法中完成是非常不好的選擇,由于GC的工作量很大,尤其是回收Young代內(nèi)存時,大都會引起應(yīng)用程序暫停,所以再選擇使用finalize方法進行資源清理,會導(dǎo)致GC負(fù)擔(dān)更大,程序運行效率更差。
10. 盡量使用基本數(shù)據(jù)類型代替對象
String str = "hello";
上面這種方式會創(chuàng)建一個"hello"字符串,而且JVM的字符緩存池還會緩存這個字符串;
String str = new String("hello");
此時程序除創(chuàng)建字符串外,str所引用的String對象底層還包含一個char[]數(shù)組,這個char[]數(shù)組依次存放了h,e,l,l,o
11. 單線程應(yīng)盡量使用HashMap、ArrayList
HashTable、Vector等使用了同步機制,降低了性能。
12. 盡量合理的創(chuàng)建HashMap
當(dāng)你要創(chuàng)建一個比較大的hashMap時,充分利用另一個構(gòu)造函數(shù)
public HashMap(int initialCapacity, float loadFactor)
避免HashMap多次進行了hash重構(gòu),擴容是一件很耗費性能的事,在默認(rèn)中initialCapacity只有16,而loadFactor是 0.75,需要多大的容量,你最好能準(zhǔn)確的估計你所需要的最佳大小,同樣的Hashtable,Vectors也是一樣的道理。
13. 盡量減少對變量的重復(fù)計算
并且在循環(huán)中應(yīng)該避免使用復(fù)雜的表達式,在循環(huán)中,循環(huán)條件會被反復(fù)計算,如果不使用復(fù)雜表達式,而使循環(huán)條件值不變的話,程序?qū)\行的更快。
14. 盡量避免不必要的創(chuàng)建
15. 盡量在finally塊中釋放資源
程序中使用到的資源應(yīng)當(dāng)被釋放,以避免資源泄漏。這最好在finally塊中去做。不管程序執(zhí)行的結(jié)果如何,finally塊總是會執(zhí)行的,以確保資源的正確關(guān)閉。
16. 盡量使用移位來代替'a/b'的操作
"/"是一個代價很高的操作,使用移位的操作將會更快和更有效
17.盡量使用移位來代替'a*b'的操作
同樣的,對于'*'操作,使用移位的操作將會更快和更有效
18. 盡量確定StringBuffer的容量
StringBuffer 的構(gòu)造器會創(chuàng)建一個默認(rèn)大小(通常是16)的字符數(shù)組。在使用中,如果超出這個大小,就會重新分配內(nèi)存,創(chuàng)建一個更大的數(shù)組,并將原先的數(shù)組復(fù)制過來,再 丟棄舊的數(shù)組。在大多數(shù)情況下,你可以在創(chuàng)建 StringBuffer的時候指定大小,這樣就避免了在容量不夠的時候自動增長,以提高性能。
19. 盡量早釋放無用對象的引用
大部分時,方法局部引用變量所引用的對象 會隨著方法結(jié)束而變成垃圾,因此,大部分時候程序無需將局部,引用變量顯式設(shè)為null.
20. 盡量避免使用二維數(shù)組
二維數(shù)據(jù)占用的內(nèi)存空間比一維數(shù)組多得多,大概10倍以上。
21. 盡量避免使用split
除非是必須的,否則應(yīng)該避免使用split,split由于支持正則表達式,所以效率比較低,如果是頻繁的幾十,幾百萬的調(diào)用將會耗費大量資源,如果確實需 要頻繁的調(diào)用split,可以考慮使用apache的StringUtils.split(string,char),頻繁split的可以緩存結(jié)果。
22. ArrayList LinkedList
一 個是線性表,一個是鏈表,一句話,隨機查詢盡量使用ArrayList,ArrayList優(yōu)于LinkedList,LinkedList還要移動指 針,添加刪除的操作LinkedList優(yōu)于ArrayList,ArrayList還要移動數(shù)據(jù),不過這是理論性分析,事實未必如此,重要的是理解好2 者得數(shù)據(jù)結(jié)構(gòu),對癥下藥。
23. 盡量使用System.arraycopy ()代替通過來循環(huán)復(fù)制數(shù)組
System.arraycopy() 要比通過循環(huán)來復(fù)制數(shù)組快的多
24. 盡量緩存經(jīng)常使用的對象
盡可能將經(jīng)常使用的對象進行緩存,可以使用數(shù)組,或HashMap的容器來進行緩存,但這種方式可能導(dǎo)致系統(tǒng)占用過多的緩存,性能下降,推薦可以使用一些第三方的開源工具,如EhCache,Oscache進行緩存,他們基本都實現(xiàn)了FIFO/FLU等緩存算法。
25. 盡量避免非常大的內(nèi)存分配
有時候問題不是由當(dāng)時的堆狀態(tài)造成的,而是因為分配失敗造成的。分配的內(nèi)存塊都必須是連續(xù)的,而隨著堆越來越滿,找到較大的連續(xù)塊越來越困難。
26. 慎用異常
當(dāng)創(chuàng)建一個異常時,需要收集一個棧跟蹤(stack track),這個棧跟蹤用于描述異常是在何處創(chuàng)建的。構(gòu)建這些棧跟蹤時需要為運行時棧做一份快照,正是這一部分開銷很大。當(dāng)需要創(chuàng)建一個 Exception 時,JVM 不得不說:先別動,我想就您現(xiàn)在的樣子存一份快照,所以暫時停止入棧和出棧操作。棧跟蹤不只包含運行時棧中的一兩個元素,而是包含這個棧中的每一個元素。
如 果您創(chuàng)建一個 Exception ,就得付出代價。好在捕獲異常開銷不大,因此可以使用 try-catch 將核心內(nèi)容包起來。從技術(shù)上講,您甚至可以隨意地拋出異常,而不用花費很大的代價。招致性能損失的并不是 throw 操作--盡管在沒有預(yù)先創(chuàng)建異常的情況下就拋出異常是有點不尋常。真正要花代價的是創(chuàng)建異常。幸運的是,好的編程習(xí)慣已教會我們,不應(yīng)該不管三七二十一就 拋出異常。異常是為異常的情況而設(shè)計的,使用時也應(yīng)該牢記這一原則。
(1)。 用Boolean.valueOf(boolean b)代替new Boolean()
包裝類的內(nèi)存占用是很恐怖的,它是基本類型內(nèi)存占用的N倍(N2),同時new一個對象也是性能的消耗。
(2)。 用Integer.valueOf(int i)代替new Integer()
和Boolean類似,java開發(fā)中使用Integer封裝int的場合也非常多,并且通常用int表示的數(shù)值都非常小。SUN SDK中對Integer的實例化進行了優(yōu)化,Integer類緩存了-128到127這256個狀態(tài)的Integer,如果使用 Integer.valueOf(int i),傳入的int范圍正好在此內(nèi),就返回靜態(tài)實例。這樣如果我們使用Integer.valueOf代替new Integer的話也將大大降低內(nèi)存的占用。
(3)。 用StringBuffer的append方法代替"+"進行字符串相加。
這個已經(jīng)被N多人說過N次了,這個就不多說了。
(4)。 避免過深的類層次結(jié)構(gòu)和過深的方法調(diào)用。
因為這兩者都是非常占用內(nèi)存的(特別是方法調(diào)用更是堆??臻g的消耗大戶)。
(5)。 變量只有在用到它的時候才定義和實例化。
這是初學(xué)者最容易犯的錯,合理的使用變量,并且只有在用到它的時候才定義和實例化,能有效的避免內(nèi)存空間和執(zhí)行性能上的浪費,從而提高了代碼的效率。
(6)。 避免在循環(huán)體中聲明創(chuàng)建對象,即使該對象占用內(nèi)存空間不大。
這種情況在我們的實際應(yīng)用中經(jīng)常遇到,而且我們很容易犯類似的錯誤
采用上面的第二種編寫方式,僅在內(nèi)存中保存一份對該對象的引用,而不像上面的第一種編寫方式中代碼會在內(nèi)存中產(chǎn)生大量的對象引用,浪費大量的內(nèi)存空間,而且增大了垃圾回收的負(fù)荷。因此在循環(huán)體中聲明創(chuàng)建對象的編寫方式應(yīng)該盡量避免。
(7)。 如果if判斷中多個條件用'||'或者''連接,請將出現(xiàn)頻率最高的條件放在表達式最前面。
這個小技巧往往能有效的提高程序的性能,尤其是當(dāng)if判斷放在循環(huán)體里面時,效果更明顯。
1.JVM管理兩種類型的內(nèi)存:堆內(nèi)存(heap),棧內(nèi)存(stack),堆內(nèi)在主要用來存儲程序在運行時創(chuàng)建或?qū)嵗膶ο笈c變量。而棧內(nèi)存則是用來存儲程序代碼中聲明為靜態(tài)(static)(或非靜態(tài))的方法。
2.JVM中對象的生命周期,創(chuàng)建階段,應(yīng)用階段,不可視階段,不可到達階段,可收集階段,終結(jié)階段,釋放階段
3.避免在循環(huán)體中創(chuàng)建對象,即使該對象點用內(nèi)存空間不大。
4.軟引用的主要特點是具有較強的引用功能。只有當(dāng)內(nèi)存不夠的時候,才回收這類內(nèi)存,因此在內(nèi)存足夠的時候,它們通常不被回收。它可以用于實現(xiàn)一些常用資源的緩存,實現(xiàn)Cache的功能
5.弱引用對象與Soft引用對象最大不同就在于:GC在進行回收時,需要通過算法檢查是否回收Soft引用對象,而對于Weak引用對象,GC總是進行回收。
6.共享靜態(tài)變量存儲空間
7.有時候我們?yōu)榱颂岣呦到y(tǒng)性能,避免重復(fù)耗時的操作,希望能夠重用一些創(chuàng)建完成的對象,利用對象池實現(xiàn)。類似JDBC連接池。
8.瞬間值,序列化對象大變量時,如果此大變量又沒有用途,則使用transient聲明,不序列化此變量。同時網(wǎng)絡(luò)傳輸中也不傳輸。
9.不要提前創(chuàng)建對象
10 .(1)最基本的建議就是盡早釋放無用對象的引用
A a = new A();
a = null; //當(dāng)使用對象a之后主動將其設(shè)置為空
(2)盡量少用finalize函數(shù)。
(3) 如果需要使用經(jīng)常用到的圖片展,可以使用軟引用。
(4) 注意集合數(shù)據(jù)類型,包括數(shù)組,樹等數(shù)據(jù),這些數(shù)據(jù)結(jié)構(gòu)對GC來說,回收更為復(fù)雜,
(5) 盡量避免在類的默認(rèn)構(gòu)造器中創(chuàng)建,初始化大量的對象,防止在調(diào)用其自類的構(gòu)造器時造成不必要的內(nèi)存資源浪費。
(6) 盡量避免強制系統(tǒng)做垃圾內(nèi)存回收。
(7) 盡量避免顯式申請數(shù)組空間。
(8) 盡量在合適的場景下使用對象池技術(shù)以提高系統(tǒng)性能,縮減系統(tǒng)內(nèi)存開銷。
11.當(dāng)做數(shù)組拷貝操作時,采用System.arraycopy()方法完成拷貝操作要比采用循環(huán)的辦法完成數(shù)組拷貝操作效率高
12. 盡量避免在循環(huán)體中調(diào)用方法,因為方法調(diào)用是比較昂貴的。
13. 盡量避免在循環(huán)體中使用try-catch 塊,最好在循環(huán)體外使用try--catch塊以提高系統(tǒng)性能。
14. 在多重循環(huán)中,如果有可能,盡量將最長的循環(huán)放在最內(nèi)層,最短的循環(huán)放在最外層,以減少循環(huán)層間的變換次數(shù)。
15. 在需要線程安全的情況下,使用List list = Collections.synchronizedList(new ArrayList());
16. 如果預(yù)知長度,就設(shè)置ArrayList的長度。
17. ArrayList 與 LinkedList 選擇,熟悉底層的實現(xiàn)原理,選擇適當(dāng)?shù)娜萜鳌?/p>
18. 字符串累加采用StringBuffer.
19. 系統(tǒng)I/O優(yōu)化,采用緩沖和壓縮技術(shù)。優(yōu)化性能。
20. 避免在類在構(gòu)造器的初始化其他類
21 盡量避免在構(gòu)造中對靜態(tài)變量做賦值操作
22. 不要在類的構(gòu)造器中創(chuàng)建類的實例
23. 組合優(yōu)化繼承
24. 最好通過Class.forname() 動態(tài)的裝載類
25. JSP優(yōu)化,采用out 對象中的print方法代替println()方法
26 .采用ServletOutputStream 對象代替JSPWriter對象
27. 采用適當(dāng)?shù)闹党跏蓟痮ut 對象緩沖區(qū)的大小
28. 盡量采用forward()方法重定向新的JSP
29. 利用線程池技術(shù)處理客戶請求
30.Servlet優(yōu)化
(1) 通過init()方法來緩存一些靜態(tài)數(shù)據(jù)以提高應(yīng)用性能。
(2) 用print() 方法取代println()方法。
(3) 用ServletOutputStream 取代 PrintWriter.
(4) 盡量縮小同步代碼數(shù)量
31. 改善Servlet應(yīng)用性能的方法
(1)不要使用SingleThreadModel
(2)使用線程池ThreadPool
32. EJB優(yōu)化
實體EJB:
(1)實體EJB中常用數(shù)據(jù)緩存與釋放
(2)采用延遲加載的方式裝載關(guān)聯(lián)數(shù)據(jù)
(3)盡可能地應(yīng)用CMP類型實體EJB
(4)直接采用JDBC技術(shù)處理大型數(shù)據(jù)
33. 優(yōu)化JDBC連接
(1)設(shè)置合適的預(yù)取行值
(2)采用連接池技術(shù)
(3)全合理應(yīng)用事務(wù)
(4)選擇合適的事務(wù)隔離層與及時關(guān)閉連接對象
34. PreparedStatemetn只編譯解析一次,而Statement每次都編譯解析。
35. 盡可能地做批處理更新
36. 通過采用合適的getXXX方法提高系統(tǒng)性能
37. 采用設(shè)計模式。
Java是當(dāng)下最火編程語言之一。Java軟件開發(fā)工程師即當(dāng)下做熱門的職業(yè),而Java軟件開發(fā)最佳的框架你了解多少呢?每個框架都有各自的優(yōu)劣勢,IT培訓(xùn)介紹根據(jù)項目看哪個框架適合你。
SpringMVC:出現(xiàn)時間久遠,具有較好的開發(fā)系統(tǒng),幫助你查詢需要的。最好和最知名的Java框架之一。
Struts2:對于Java軟件開發(fā)工程師是個很好的選擇。它使得測試寫代碼所需的工作量減輕了。不過它也是不夠靈活的。
Hibernate:可對java軟件開發(fā)對象執(zhí)行數(shù)據(jù)庫操作??蓮浐蠈ο蠛完P(guān)系詞之間的差距。獨立于DB的。
JSF:JavaServerFaces,易使用,無外部依賴,提供很多功能。
Vaadin:是Java軟件開發(fā)工程師創(chuàng)建業(yè)務(wù)應(yīng)用程序時使用的框架。
GWT:GoogleWebToolkit是免費的,可優(yōu)化復(fù)雜的程序,可獲得單個代碼庫,簡化開發(fā)和調(diào)試過程。
Grails:功能強大,設(shè)置新項目和支架很快。
各種流行框架都有著自己的優(yōu)缺點,只要你記得選個適合項目的,方便安裝,網(wǎng)絡(luò)的活躍程度適合的等等就可以。
Bazel:來自Google的構(gòu)建工具,可以快速、可靠地構(gòu)建代碼。官網(wǎng)
Gradle:使用Groovy(非XML)進行增量構(gòu)建,可以很好地與Maven依賴管理配合工作。官網(wǎng)
Buck:Facebook構(gòu)建工具。官網(wǎng)
字節(jié)碼操作
編程方式操作字節(jié)碼的開發(fā)庫。
ASM:通用底層字節(jié)碼操作和分析開發(fā)庫。官網(wǎng)
Byte Buddy:使用流式API進一步簡化字節(jié)碼生成。官網(wǎng)
Byteman:在運行時通過DSL(規(guī)則)操作字節(jié)碼進行測試和故障排除。官網(wǎng)
Javassist:一個簡化字節(jié)碼編輯嘗試。官網(wǎng)
集群管理
在集群內(nèi)動態(tài)管理應(yīng)用程序的框架。
Apache Aurora:Apache Aurora是一個Mesos框架,用于長時間運行服務(wù)和定時任務(wù)(cron job)。官網(wǎng)
Singularity:Singularity是一個Mesos框架,方便部署和操作。它支持Web Service、后臺運行、調(diào)度作業(yè)和一次性任務(wù)。官網(wǎng)
代碼分析
測量代碼指標(biāo)和質(zhì)量工具。
Checkstyle:代碼編寫規(guī)范和標(biāo)準(zhǔn)靜態(tài)分析工具。官網(wǎng)
Error Prone:將常見編程錯誤作為運行時錯誤報告。官網(wǎng)
FindBugs:通過字節(jié)碼靜態(tài)分析查找隱藏bug。官網(wǎng)
jQAssistant:使用基于Neo4J查詢語言進行代碼靜態(tài)分析。官網(wǎng)
PMD:對源代碼分析查找不良的編程習(xí)慣。官網(wǎng)
SonarQube:通過插件集成其它分析組件,對過去一段時間內(nèi)的數(shù)據(jù)進行統(tǒng)計。官網(wǎng)
編譯器生成工具
用來創(chuàng)建解析器、解釋器或編譯器的框架。
ANTLR:復(fù)雜的全功能自頂向下解析框架。官網(wǎng)
JavaCC:JavaCC是更加專門的輕量級工具,易于上手且支持語法超前預(yù)測。官網(wǎng)
外部配置工具
支持外部配置的開發(fā)庫。
config:針對JVM語言的配置庫。官網(wǎng)
owner:減少冗余配置屬性。官網(wǎng)
約束滿足問題求解程序
幫助解決約束滿足問題的開發(fā)庫。
Choco:可直接使用的約束滿足問題求解程序,使用了約束規(guī)劃技術(shù)。官網(wǎng)
JaCoP:為FlatZinc語言提供了一個接口,可以執(zhí)行MiniZinc模型。官網(wǎng)
OptaPlanner:企業(yè)規(guī)劃與資源調(diào)度優(yōu)化求解程序。官網(wǎng)
Sat4J:邏輯代數(shù)與優(yōu)化問題最先進的求解程序。官網(wǎng)
持續(xù)集成
Bamboo:Atlassian解決方案,可以很好地集成Atlassian的其他產(chǎn)品??梢赃x擇開源許可,也可以購買商業(yè)版。官網(wǎng)
CircleCI:提供托管服務(wù),可以免費試用。官網(wǎng)
Codeship:提供托管服務(wù),提供有限的免費模式。官網(wǎng)
fabric8:容器集成平臺。官網(wǎng)
Go:ThoughtWork開源解決方案。官網(wǎng)
Jenkins:支持基于服務(wù)器的部署服務(wù)。官網(wǎng)
TeamCity:JetBrain的持續(xù)集成解決方案,有免費版。官網(wǎng)
Travis:通常用作開源項目的托管服務(wù)。官網(wǎng)
Buildkite: 持續(xù)集成工具,用簡單的腳本就能設(shè)置pipeline,而且能快速構(gòu)建,可以免費試用。官網(wǎng)
CSV解析
簡化CSV數(shù)據(jù)讀寫的框架與開發(fā)庫
uniVocity-parsers:速度最快功能最全的CSV開發(fā)庫之一,同時支持TSV與固定寬度記錄的讀寫。官網(wǎng)
數(shù)據(jù)庫
簡化數(shù)據(jù)庫交互的相關(guān)工具。
Apache Phoenix:HBase針對低延時應(yīng)用程序的高性能關(guān)系數(shù)據(jù)庫層。官網(wǎng)
Crate:實現(xiàn)了數(shù)據(jù)同步、分片、縮放、復(fù)制的分布式數(shù)據(jù)存儲。除此之外還可以使用基于SQL的語法跨集群查詢。官網(wǎng)
Flyway:簡單的數(shù)據(jù)庫遷移工具。官網(wǎng)
H2:小型SQL數(shù)據(jù)庫,以可以作為內(nèi)存數(shù)據(jù)庫使用著稱。官網(wǎng)
HikariCP:高性能JDBC連接工具。官網(wǎng)
JDBI:便捷的JDBC抽象。官網(wǎng)
Protobuf:Google數(shù)據(jù)交換格式。官網(wǎng)
SBE:簡單二進制編碼,是最快速的消息格式之一。官網(wǎng)
Wire:整潔輕量級協(xié)議緩存。官網(wǎng)
幫實現(xiàn)依賴翻轉(zhuǎn)范式的開發(fā)庫。?官網(wǎng)
Apache DeltaSpike:CDI擴展框架。官網(wǎng)
Dagger2:編譯時注入框架,不需要使用反射。官網(wǎng)
Guice:可以匹敵Dagger的輕量級注入框架。官網(wǎng)
HK2:輕量級動態(tài)依賴注入框架。官網(wǎng)
開發(fā)流程增強工具
從最基本的層面增強開發(fā)流程。
ADT4J:針對代數(shù)數(shù)據(jù)類型的JSR-269代碼生成器。官網(wǎng)
AspectJ:面向切面編程(AOP)的無縫擴展。官網(wǎng)
Auto:源代碼生成器集合。官網(wǎng)
DCEVM:通過修改JVM在運行時支持對已加載的類進行無限次重定義。官網(wǎng)
HotswapAgent:支持無限次重定義運行時類與資源。官網(wǎng)
Immutables:類似Scala的條件類。官網(wǎng)
JHipster:基于Spring Boot與AngularJS應(yīng)用程序的Yeoman源代碼生成器。官網(wǎng)
JRebel:無需重新部署,可以即時重新加載代碼與配置的商業(yè)軟件。官網(wǎng)
Lombok:減少冗余的代碼生成器。官網(wǎng)
Spring Loaded:類重載代理。官網(wǎng)
vert.x:多語言事件驅(qū)動應(yīng)用框架。官網(wǎng)
分布式應(yīng)用
用來編寫分布式容錯應(yīng)用的開發(fā)庫和框架。
Akka:用來編寫分布式容錯并發(fā)事件驅(qū)動應(yīng)用程序的工具和運行時。官網(wǎng)
Apache Storm:實時計算系統(tǒng)。官網(wǎng)
Apache ZooKeeper:針對大型分布式系統(tǒng)的協(xié)調(diào)服務(wù),支持分布式配置、同步和名稱注冊。官網(wǎng)
Hazelcast:高可擴展內(nèi)存數(shù)據(jù)網(wǎng)格。官網(wǎng)
Hystrix:提供延遲和容錯。官網(wǎng)
JGroups:提供可靠的消息傳遞和集群創(chuàng)建的工具。官網(wǎng)
Orbit:支持虛擬角色(Actor),在傳統(tǒng)角色的基礎(chǔ)上增加了另外一層抽象。官網(wǎng)
Quasar:為JVM提供輕量級線程和角色。官網(wǎng)
分布式數(shù)據(jù)庫
對應(yīng)用程序而言,在分布式系統(tǒng)中的數(shù)據(jù)庫看起來就像是只有一個數(shù)據(jù)源。
Apache Cassandra:列式數(shù)據(jù)庫,可用性高且沒有單點故障。官網(wǎng)
Apache HBase:針對大數(shù)據(jù)的Hadoop數(shù)據(jù)庫。官網(wǎng)
Druid:實時和歷史OLAP數(shù)據(jù)存儲,在聚集查詢和近似查詢方面表現(xiàn)不俗。官網(wǎng)
Infinispan:針對緩存的高并發(fā)鍵值對數(shù)據(jù)存儲。官網(wǎng)
發(fā)布
以本機格式發(fā)布應(yīng)用程序的工具。
Bintray:發(fā)布二進制文件版本控制工具。可以于Maven或Gradle一起配合使用。提供開源免費版本和幾種商業(yè)收費版本。官網(wǎng)
Central Repository:最大的二進制組件倉庫,面向開源社區(qū)提供免費服務(wù)。Apache Maven默認(rèn)使用Central?官網(wǎng)Repository,也可以在所有其他構(gòu)建工具中使用。
IzPack:為跨平臺部署建立創(chuàng)作工具(Authoring Tool)。官網(wǎng)
JitPack:打包GitHub倉庫的便捷工具??筛鶕?jù)需要構(gòu)建Maven、Gradle項目,發(fā)布可立即使用的組件。官網(wǎng)
Launch4j:將JAR包裝為輕量級本機Windows可執(zhí)行程序。官網(wǎng)
Nexus:支持代理和緩存功能的二進制管理工具。官網(wǎng)
packr:將JAR、資源和JVM打包成Windows、Linux和Mac OS X本地發(fā)布文件。官網(wǎng)
文檔處理工具
處理Office文檔的開發(fā)庫。
Apache POI:支持OOXML規(guī)范(XLSX、DOCX、PPTX)以及OLE2規(guī)范(XLS、DOC、PPT)。官網(wǎng)
documents4j:使用第三方轉(zhuǎn)換器進行文檔格式轉(zhuǎn)換,轉(zhuǎn)成類似MS Word這樣的格式。官網(wǎng)
jOpenDocument:處理OpenDocument格式(由Sun公司提出基于XML的文檔格式)。官網(wǎng)
函數(shù)式編程
函數(shù)式編程支持庫。
Cyclops:支持一元(Monad)操作和流操作工具類、comprehension(List語法)、模式匹配、trampoline等特性。官網(wǎng)
Fugue:Guava的函數(shù)式編程擴展。官網(wǎng)
Functional Java:實現(xiàn)了多種基礎(chǔ)和高級編程抽象,用來輔助面向組合開發(fā)(composition-oriented development)。官網(wǎng)
Javaslang:一個函數(shù)式組件庫,提供持久化數(shù)據(jù)類型和函數(shù)式控制結(jié)構(gòu)。官網(wǎng)
jOOλ:旨在填補Java 8 lambda差距的擴展,提供了眾多缺失的類型和一組豐富的順序流API。官網(wǎng)
游戲開發(fā)
游戲開發(fā)框架。
jMonkeyEngine:現(xiàn)代3D游戲開發(fā)引擎。官網(wǎng)
libGDX:全面的跨平臺高級框架。官網(wǎng)
LWJGL:對OpenGL/CL/AL等技術(shù)進行抽象的健壯框架。官網(wǎng)
GUI
現(xiàn)代圖形化用戶界面開發(fā)庫。
JavaFX:Swing的后繼者。官網(wǎng)
Scene Builder:開發(fā)JavaFX應(yīng)用的可視化布局工具。官網(wǎng)
高性能計算
涵蓋了從集合到特定開發(fā)庫的高性能計算相關(guān)工具。
Agrona:高性能應(yīng)用中常見的數(shù)據(jù)結(jié)構(gòu)和工具方法。官網(wǎng)
Disruptor:線程間消息傳遞開發(fā)庫。官網(wǎng)
fastutil:快速緊湊的特定類型集合(Collection)。官網(wǎng)
GS Collections:受Smalltalk啟發(fā)的集合框架。官網(wǎng)
HPPC:基礎(chǔ)類型集合。官網(wǎng)
Javolution:實時和嵌入式系統(tǒng)的開發(fā)庫。官網(wǎng)
JCTools:JDK中缺失的并發(fā)工具。官網(wǎng)
Koloboke:Hash set和hash map。官網(wǎng)
Trove:基礎(chǔ)類型集合。官網(wǎng)
High-scale-bli:Cliff Click 個人開發(fā)的高性能并發(fā)庫官網(wǎng)
IDE
簡化開發(fā)的集成開發(fā)環(huán)境。
Eclipse:老牌開源項目,支持多種插件和編程語言。官網(wǎng)
IntelliJ IDEA:支持眾多JVM語言,是安卓開發(fā)者好的選擇。商業(yè)版主要針對企業(yè)客戶。官網(wǎng)
NetBeans:為多種技術(shù)提供集成化支持,包括Java SE、Java EE、數(shù)據(jù)庫訪問、HTML5
Imgscalr:純Java 2D實現(xiàn),簡單、高效、支持硬件加速的圖像縮放開發(fā)庫。官網(wǎng)
Picasso:安卓圖片下載和圖片緩存開發(fā)庫。官網(wǎng)
Thumbnailator:Thumbnailator是一個高質(zhì)量Java縮略圖開發(fā)庫。官網(wǎng)
ZXing:支持多種格式的一維、二維條形碼圖片處理開發(fā)庫。官網(wǎng)
im4java: 基于ImageMagick或GraphicsMagick命令行的圖片處理開發(fā)庫,基本上ImageMagick能夠支持的圖片格式和處理方式都能夠處理。官網(wǎng)
Apache Batik:在Java應(yīng)用中程序以SVG格式顯示、生成及處理圖像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模塊,可以集成使用也可以單獨使用,還可以擴展自定義的SVG標(biāo)簽。官網(wǎng)
JSON
簡化JSON處理的開發(fā)庫。
Genson:強大且易于使用的Java到JSON轉(zhuǎn)換開發(fā)庫。官網(wǎng)
Gson:谷歌官方推出的JSON處理庫,支持在對象與JSON之間雙向序列化,性能良好且可以實時調(diào)用。官網(wǎng)
Jackson:與GSON類似,在頻繁使用時性能更佳。官網(wǎng)
LoganSquare:基于Jackson流式API,提供對JSON解析和序列化。比GSON與Jackson組合方式效果更好。官網(wǎng)
Fastjson:一個Java語言編寫的高性能功能完善的JSON庫。官網(wǎng)
Kyro:快速、高效、自動化的Java對象序列化和克隆庫。官網(wǎng)
JVM與JDK
目前的JVM和JDK實現(xiàn)。
JDK 9:JDK 9的早期訪問版本。官網(wǎng)
OpenJDK:JDK開源實現(xiàn)。官網(wǎng)
基于JVM的語言
除Java外,可以用來編寫JVM應(yīng)用程序的編程語言。
Scala:融合了面向?qū)ο蠛秃瘮?shù)式編程思想的靜態(tài)類型編程語言。官網(wǎng)
Groovy:類型可選(Optionally typed)的動態(tài)語言,支持靜態(tài)類型和靜態(tài)編譯。目前是一個Apache孵化器項目。官網(wǎng)
Clojure:可看做現(xiàn)代版Lisp的動態(tài)類型語言。官網(wǎng)
Ceylon:RedHat開發(fā)的面向?qū)ο箪o態(tài)類型編程語言。官網(wǎng)
Kotlin:JetBrain針對JVM、安卓和瀏覽器提供的靜態(tài)類型編程語言。官網(wǎng)
Xtend:一種靜態(tài)編程語言,能夠?qū)⑵浯a轉(zhuǎn)換為簡潔高效的Java代碼,并基于JVM運行。官網(wǎng)
日志
記錄應(yīng)用程序行為日志的開發(fā)庫。
Apache Log4j 2:使用強大的插件和配置架構(gòu)進行完全重寫。官網(wǎng)
kibana:分析及可視化日志文件。官網(wǎng)
Logback:強健的日期開發(fā)庫,通過Groovy提供很多有趣的選項。官網(wǎng)
logstash:日志文件管理工具。官網(wǎng)
Metrics:通過JMX或HTTP發(fā)布參數(shù),并且支持存儲到數(shù)據(jù)庫。官網(wǎng)
SLF4J:日志抽象層,需要與具體的實現(xiàn)配合使用。官網(wǎng)
機器學(xué)習(xí)
提供具體統(tǒng)計算法的工具。其算法可從數(shù)據(jù)中學(xué)習(xí)。
Apache Flink:快速、可靠的大規(guī)模數(shù)據(jù)處理引擎。官網(wǎng)
Apache Hadoop:在商用硬件集群上用來進行大規(guī)模數(shù)據(jù)存儲的開源軟件框架。官網(wǎng)
Apache Mahout:專注協(xié)同過濾、聚類和分類的可擴展算法。官網(wǎng)
Apache Spark:開源數(shù)據(jù)分析集群計算框架。官網(wǎng)
DeepDive:從非結(jié)構(gòu)化數(shù)據(jù)建立結(jié)構(gòu)化信息并集成到已有數(shù)據(jù)庫的工具。官網(wǎng)
Deeplearning4j:分布式多線程深度學(xué)習(xí)開發(fā)庫。官網(wǎng)
H2O:用作大數(shù)據(jù)統(tǒng)計的分析引擎。官網(wǎng)
Weka:用作數(shù)據(jù)挖掘的算法集合,包括從預(yù)處理到可視化的各個層次。官網(wǎng)
QuickML:高效機器學(xué)習(xí)庫。官網(wǎng)、GitHub
消息傳遞
在客戶端之間進行消息傳遞,確保協(xié)議獨立性的工具。
Aeron:高效可擴展的單播、多播消息傳遞工具。官網(wǎng)
Apache ActiveMQ:實現(xiàn)JMS的開源消息代理(broker),可將同步通訊轉(zhuǎn)為異步通訊。官網(wǎng)
Apache Camel:通過企業(yè)級整合模式(Enterprise Integration Pattern EIP)將不同的消息傳輸API整合在一起。官網(wǎng)
Apache Kafka:高吞吐量分布式消息系統(tǒng)。官網(wǎng)
Hermes:快速、可靠的消息代理(Broker),基于Kafka構(gòu)建。官網(wǎng)
JBoss HornetQ:清晰、準(zhǔn)確、模塊化,可以方便嵌入的消息工具。官網(wǎng)
JeroMQ:ZeroMQ的純Java實現(xiàn)。官網(wǎng)
Smack:跨平臺XMPP客戶端函數(shù)庫。官網(wǎng)
Openfire:是開源的、基于XMPP、采用Java編程語言開發(fā)的實時協(xié)作服務(wù)器。 Openfire安裝和使用都非常簡單,并可利用Web界面進行管理。?官網(wǎng)GitHub
Spark:是一個開源,跨平臺IM客戶端。它的特性支持集組聊天,電話集成和強大安全性能。如果企業(yè)內(nèi)部部署IM使用Openfire+Spark是最佳的組合。?官網(wǎng)?GitHub
Tigase: 是一個輕量級的可伸縮的 Jabber/XMPP 服務(wù)器。無需其他第三方庫支持,可以處理非常高的復(fù)雜和大量的用戶數(shù),可以根據(jù)需要進行水平擴展。?官網(wǎng)
雜項
未分類其它資源。
Design Patterns:實現(xiàn)并解釋了最常見的設(shè)計模式。官網(wǎng)
Jimfs:內(nèi)存文件系統(tǒng)。官網(wǎng)
Lanterna:類似curses的簡單console文本GUI函數(shù)庫。官網(wǎng)
LightAdmin:可插入式CRUD UI函數(shù)庫,可用來快速應(yīng)用開發(fā)。官網(wǎng)
OpenRefine:用來處理混亂數(shù)據(jù)的工具,包括清理、轉(zhuǎn)換、使用Web Service進行擴展并將其關(guān)聯(lián)到數(shù)據(jù)庫。官網(wǎng)
RoboVM:Java編寫原生iOS應(yīng)用。官網(wǎng)
Quartz:強大的任務(wù)調(diào)度庫.官網(wǎng)
應(yīng)用監(jiān)控工具
監(jiān)控生產(chǎn)環(huán)境中應(yīng)用程序的工具。
AppDynamics:性能監(jiān)測商業(yè)工具。官網(wǎng)
JavaMelody:性能監(jiān)測和分析工具。官網(wǎng)
Kamon:Kamon用來監(jiān)測在JVM上運行的應(yīng)用程序。官網(wǎng)
New Relic:性能監(jiān)測商業(yè)工具。官網(wǎng)
SPM:支持對JVM應(yīng)用程序進行分布式事務(wù)追蹤的性能監(jiān)測商業(yè)工具。官網(wǎng)
Takipi:產(chǎn)品運行時錯誤監(jiān)測及調(diào)試商業(yè)工具。官網(wǎng)
原生開發(fā)庫
用來進行特定平臺開發(fā)的原生開發(fā)庫。
JNA:不使用JNI就可以使用原生開發(fā)庫。此外,還為常見系統(tǒng)函數(shù)提供了接口。官網(wǎng)
自然語言處理
用來專門處理文本的函數(shù)庫。
Apache OpenNLP:處理類似分詞等常見任務(wù)的工具。官網(wǎng)
CoreNLP:斯坦佛CoreNLP提供了一組基礎(chǔ)工具,可以處理類似標(biāo)簽、實體名識別和情感分析這樣的任務(wù)。官網(wǎng)
LingPipe:一組可以處理各種任務(wù)的工具集,支持POS標(biāo)簽、情感分析等。官網(wǎng)
Mallet:統(tǒng)計學(xué)自然語言處理、文檔分類、聚類、主題建模等。官網(wǎng)
網(wǎng)絡(luò)
網(wǎng)絡(luò)編程函數(shù)庫。
Async Http Client:異步HTTP和WebSocket客戶端函數(shù)庫。官網(wǎng)
Grizzly:NIO框架,在Glassfish中作為網(wǎng)絡(luò)層使用。官網(wǎng)
Netty:構(gòu)建高性能網(wǎng)絡(luò)應(yīng)用程序開發(fā)框架。官網(wǎng)
OkHttp:一個Android和Java應(yīng)用的HTTP+SPDY客戶端。官網(wǎng)
Undertow:基于NIO實現(xiàn)了阻塞和非阻塞API的Web服務(wù)器,在WildFly中作為網(wǎng)絡(luò)層使用。官網(wǎng)
ORM
處理對象持久化的API。
Ebean:支持快速數(shù)據(jù)訪問和編碼的ORM框架。官網(wǎng)
EclipseLink:支持許多持久化標(biāo)準(zhǔn),JPA、JAXB、JCA和SDO。官網(wǎng)
Hibernate:廣泛使用、強健的持久化框架。Hibernate的技術(shù)社區(qū)非常活躍。官網(wǎng)
MyBatis:帶有存儲過程或者SQL語句的耦合對象(Couples object)。官網(wǎng)
OrmLite:輕量級開發(fā)包,免除了其它ORM產(chǎn)品中的復(fù)雜性和開銷。官網(wǎng)
Nutz:另一個SSH。官網(wǎng),Github
JFinal:JAVA WEB + ORM框架。官網(wǎng),Github
用來幫助創(chuàng)建PDF文件的資源。
Apache FOP:從XSL-FO創(chuàng)建PDF。官網(wǎng)
Apache PDFBox:用來創(chuàng)建和操作PDF的工具集。官網(wǎng)
DynamicReports:JasperReports的精簡版。官網(wǎng)
flyingsaucer:XML/XHTML和CSS 2.1渲染器。官網(wǎng)
iText:一個易于使用的PDF函數(shù)庫,用來編程創(chuàng)建PDF文件。注意,用于商業(yè)用途時需要許可證。官網(wǎng)
JasperReports:一個復(fù)雜的報表引擎。官網(wǎng)
性能分析
性能分析、性能剖析及基準(zhǔn)測試工具。
jHiccup:提供平臺中JVM暫停的日志和記錄。官網(wǎng)
JMH:JVM基準(zhǔn)測試工具。官網(wǎng)
JProfiler:商業(yè)分析器。官網(wǎng)
LatencyUtils:測量和報告延遲的工具。官網(wǎng)
VisualVM:對運行中的應(yīng)用程序信息提供了可視化界面。官網(wǎng)
YourKit Java Profiler:商業(yè)分析器。官網(wǎng)
響應(yīng)式開發(fā)庫
用來開發(fā)響應(yīng)式應(yīng)用程序的開發(fā)庫。
Reactive Streams:異步流處理標(biāo)準(zhǔn),支持非阻塞式反向壓力(backpressure)。官網(wǎng)
Reactor:構(gòu)建響應(yīng)式快速數(shù)據(jù)(fast-data)應(yīng)用程序的開發(fā)庫。官網(wǎng)
RxJava:通過JVM可觀察序列(observable sequence)構(gòu)建異步和基于事件的程序。官網(wǎng)
REST框架
用來創(chuàng)建RESTful 服務(wù)的框架。
Dropwizard:偏向于自己使用的Web框架。用來構(gòu)建Web應(yīng)用程序,使用了Jetty、Jackson、Jersey和Metrics。官網(wǎng)
Feign:受Retrofit、JAXRS-2.0和WebSocket啟發(fā)的HTTP客戶端連接器(binder)。官網(wǎng)
Jersey:JAX-RS參考實現(xiàn)。官網(wǎng)
RESTEasy:經(jīng)過JAX-RS規(guī)范完全認(rèn)證的可移植實現(xiàn)。官網(wǎng)
RestExpress:一個Java類型安全的REST客戶端。官網(wǎng)
RestX:基于注解處理和編譯時源碼生成的框架。官網(wǎng)
Retrofit:類型安全的REST客戶端。官網(wǎng)
Spark:受到Sinatra啟發(fā)的Java REST框架。官網(wǎng)
Swagger:Swagger是一個規(guī)范且完整的框架,提供描述、生產(chǎn)、消費和可視化RESTful Web Service。官網(wǎng)
Blade:國人開發(fā)的一個輕量級的MVC框架. 它擁有簡潔的代碼,優(yōu)雅的設(shè)計。官網(wǎng)
科學(xué)計算與分析
用于科學(xué)計算和分析的函數(shù)庫。
DataMelt:用于科學(xué)計算、數(shù)據(jù)分析及數(shù)據(jù)可視化的開發(fā)環(huán)境。官網(wǎng)
JGraphT:支持?jǐn)?shù)學(xué)圖論對象和算法的圖形庫。官網(wǎng)
JScience:用來進行科學(xué)測量和單位的一組類。官網(wǎng)
搜索引擎
文檔索引引擎,用于搜索和分析。
Apache Solr:一個完全的企業(yè)搜索引擎。為高吞吐量通信進行了優(yōu)化。官網(wǎng)
Elasticsearch:一個分布式、支持多租戶(multitenant)全文本搜索引擎。提供了RESTful Web接口和無schema的JSON文檔。官網(wǎng)
Apache Lucene:是一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網(wǎng)
安全
用于處理安全、認(rèn)證、授權(quán)或會話管理的函數(shù)庫。
Apache Shiro:執(zhí)行認(rèn)證、授權(quán)、加密和會話管理。官網(wǎng)
Bouncy Castle,涵蓋了從基礎(chǔ)的幫助函數(shù)到PGP/SMIME操作。官網(wǎng):多途加密開發(fā)庫。支持JCA提供者(JCA provider)
Cryptomator:在云上進行客戶端跨平臺透明加密。官網(wǎng)
Keycloak:為瀏覽器應(yīng)用和RESTful Web Service集成SSO和IDM。目前還處于beta版本,但是看起來非常有前途。官網(wǎng)
PicketLink:PicketLink是一個針對Java應(yīng)用進行安全和身份認(rèn)證管理的大型項目(Umbrella Project)。官網(wǎng)
序列化
用來高效處理序列化的函數(shù)庫。
FlatBuffers:高效利用內(nèi)存的序列化函數(shù)庫,無需解包和解析即可高效訪問序列化數(shù)據(jù)。官網(wǎng)
Kryo:快速、高效的對象圖形序列化框架。官網(wǎng)
FST:提供兼容JDK的高性能對象圖形序列化。官網(wǎng)
MessagePack:一種高效的二進制序列化格式。官網(wǎng)
應(yīng)用服務(wù)器
用來部署應(yīng)用程序的服務(wù)器。
Apache Tomcat:針對Servlet和JSP的應(yīng)用服務(wù)器,健壯性好且適用性強。官網(wǎng)
Apache TomEE:Tomcat加Java EE。官網(wǎng)
Jetty:輕量級、小巧的應(yīng)用服務(wù)器,通常會嵌入到項目中。官網(wǎng)
WebSphere Liberty:輕量級、模塊化應(yīng)用服務(wù)器,由IBM開發(fā)。官網(wǎng)
WildFly:之前被稱作JBoss,由Red Hat開發(fā)。支持很多Java EE功能。官網(wǎng)
模板引擎
在模板中替換表達式的工具。
Apache Velocity:提供HTML頁面模板、email模板和通用開源代碼生成器模板。官網(wǎng)
FreeMarker:通用模板引擎,不需要任何重量級或自己使用的依賴關(guān)系。官網(wǎng)
Handlebars.java:使用Java編寫的模板引擎,邏輯簡單,支持語義擴展(semantic Mustache)。官網(wǎng)
Thymeleaf:旨在替換JSP,支持XML文件的工具。官網(wǎng)
測試
測試內(nèi)容從對象到接口,涵蓋性能測試和基準(zhǔn)測試工具。
Apache JMeter:功能性測試和性能評測。官網(wǎng)
Arquillian:集成測試和功能行測試平臺,集成Java EE容器。官網(wǎng)
AssertJ:支持流式斷言提高測試的可讀性。官網(wǎng)
Awaitility:用來同步異步操作的DSL。官網(wǎng)
Cucumber:BDD測試框架。官網(wǎng)
Gatling:設(shè)計為易于使用、可維護的和高性能負(fù)載測試工具。官網(wǎng)
Hamcrest:可用來靈活創(chuàng)建意圖(intent)表達式的匹配器。官網(wǎng)
JMockit:用來模擬靜態(tài)、final方法等。官網(wǎng)
JUnit:通用測試框架。官網(wǎng)
Mockito:在自動化單元測試中創(chuàng)建測試對象,為TDD或BDD提供支持。官網(wǎng)
PowerMock: 支持模擬靜態(tài)方法、構(gòu)造函數(shù)、final類和方法、私有方法以及移除靜態(tài)初始化器的模擬工具。官網(wǎng)
REST Assured:為REST/HTTP服務(wù)提供方便測試的Java DSL。官網(wǎng)
Selenide:為Selenium提供精準(zhǔn)的周邊API,用來編寫穩(wěn)定且可讀的UI測試。官網(wǎng)
Selenium:為Web應(yīng)用程序提供可移植軟件測試框架。官網(wǎng)
Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官網(wǎng)兼容JUnit框架,支持衍生的Groovy范的語言。
TestNG:測試框架。官網(wǎng)
Truth:Google的斷言和命題(proposition)框架。官網(wǎng)
Unitils:模塊化測試函數(shù)庫,支持單元測試和集成測試。官網(wǎng)
WireMock:Web Service測試樁(Stub)和模擬函數(shù)。官網(wǎng)
通用工具庫
通用工具類函數(shù)庫。
Apache Commons:提供各種用途的函數(shù),比如配置、驗證、集合、文件上傳或XML處理等。官網(wǎng)
args4j:命令行參數(shù)解析器。官網(wǎng)
CRaSH:為運行進行提供CLI。官網(wǎng)
Gephi:可視化跨平臺網(wǎng)絡(luò)圖形化操作程序。官網(wǎng)
Guava:集合、緩存、支持基本類型、并發(fā)函數(shù)庫、通用注解、字符串處理、I/O等。官網(wǎng)
JADE:構(gòu)建、調(diào)試多租戶系統(tǒng)的框架和環(huán)境。官網(wǎng)
javatuples:正如名字表示的那樣,提供tuple支持。盡管目前tuple的概念還有留有爭議。官網(wǎng)
JCommander:命令行參數(shù)解析器。官網(wǎng)
Protégé:提供存在論(ontology)編輯器以及構(gòu)建知識系統(tǒng)的框架。官網(wǎng)
網(wǎng)絡(luò)爬蟲
用于分析網(wǎng)站內(nèi)容的函數(shù)庫。
Apache Nutch:可用于生產(chǎn)環(huán)境的高度可擴展、可伸縮的網(wǎng)絡(luò)爬蟲。官網(wǎng)
Crawler4j:簡單的輕量級網(wǎng)絡(luò)爬蟲。官網(wǎng)
JSoup:刮取、解析、操作和清理HTML。官網(wǎng)
Web框架
用于處理Web應(yīng)用程序不同層次間通訊的框架。
Apache Tapestry:基于組件的框架,使用Java創(chuàng)建動態(tài)、強健的、高度可擴展的Web應(yīng)用程序。官網(wǎng)
Apache Wicket:基于組件的Web應(yīng)用框架,與Tapestry類似帶有狀態(tài)顯示GUI。官網(wǎng)
Google Web Toolkit:一組Web開發(fā)工具集,包含在客戶端將Java代碼轉(zhuǎn)為JavaScript的編譯器、XML解析器、RCP?官網(wǎng)API、JUnit集成、國際化支持和GUI控件。
Grails:Groovy框架,旨在提供一個高效開發(fā)環(huán)境,使用約定而非配置、沒有XML并支持混入(mixin)。官網(wǎng)
Ninja:Java全棧Web開發(fā)框架。非常穩(wěn)固、快速和高效。官網(wǎng)
Pippo:小型、高度模塊化的類Sinatra框架。官網(wǎng)
Play:使用約定而非配置,支持代碼熱加載并在瀏覽器中顯示錯誤。官網(wǎng)
PrimeFaces:JSF框架,提供免費和帶支持的商業(yè)版本。包括若干前端組件。官網(wǎng)
Ratpack:一組Java開發(fā)函數(shù)庫,用于構(gòu)建快速、高效、可擴展且測試完備的HTTP應(yīng)用程序。官網(wǎng)
Spring Boot:微框架,簡化了Spring新程序的開發(fā)過程。官網(wǎng)
Spring:旨在簡化Java EE的開發(fā)過程,提供依賴注入相關(guān)組件并支持面向切面編程。官網(wǎng)
Vaadin:基于GWT構(gòu)建的事件驅(qū)動框架。使用服務(wù)端架構(gòu),客戶端使用Ajax。官網(wǎng)
Blade:國人開發(fā)的一個輕量級的MVC框架. 它擁有簡潔的代碼,優(yōu)雅的設(shè)計。官網(wǎng)
業(yè)務(wù)流程管理套件
流程驅(qū)動的軟件系統(tǒng)構(gòu)建。
jBPM:非常靈活的業(yè)務(wù)流程管理框架,致力于構(gòu)建開發(fā)與業(yè)務(wù)分析人員之間的橋梁。官網(wǎng)
Activity:輕量級工作流和業(yè)務(wù)流程管理框架。官網(wǎng)?github
資源
社區(qū)
說到代碼優(yōu)化,每個人或多或少都掌握一到兩種方法,但是這樣的方法對提升代碼運行效率效果不大,最重要是對代碼的重視和了解,這樣才能提升代碼的運行效率。在進行代碼優(yōu)化的過程中,方法是非常重要的,多掌握幾種方法,根據(jù)代碼的不同情況選擇適合的方法進行優(yōu)化。下面電腦培訓(xùn)為大家介紹Java代碼優(yōu)化的幾種方法。
1、使用指定類、方法的final修飾符
具有final修飾符的類不可派生。在Java核心API中,有許多最終應(yīng)用程序的例子,例如java.lang.String,整個類都是final。為類指定final修飾符允許繼承類,并且為方法指定final修飾符允許覆蓋該方法。如果將類指定為final,IT培訓(xùn)認(rèn)為該類的所有方法都是final。Java編譯器將尋找內(nèi)聯(lián)所有最終方法的機會。內(nèi)聯(lián)對于提高Java操作的效率非常重要。這可以將性能平均提高50%。
2、重用對象
String對象的使用是非常重要的,StringBuilder/StringBuffer并不是字符串連接。由于Java虛擬機需要時間來生成對象,所以將來垃圾收集和處理這些對象可能需要一些時間。因此,生成太多對象將對程序的性能產(chǎn)生很大影響。
3、使用局部變量
調(diào)用方法時傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時變量都保存在堆棧中,速度更快。其他變量(如靜態(tài)變量和實例變量)在堆中創(chuàng)建并且速度較慢。此外,昆明北大青鳥發(fā)現(xiàn)在堆棧中創(chuàng)建的變量,當(dāng)方法完成運行時,內(nèi)容消失,不需要進行額外的垃圾收集。
4、及時關(guān)閉流
在Java編程過程中,在執(zhí)行數(shù)據(jù)庫連接和I/O流操作時要小心。使用后,北大青鳥云南嘉薈校區(qū)官網(wǎng)建議應(yīng)及時關(guān)閉以釋放資源。因為這些大型物體的操作會導(dǎo)致系統(tǒng)的大量開銷,稍微粗心會導(dǎo)致嚴(yán)重的后果。