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