當前位置:首頁 » 操作系統 » pmd的源碼

pmd的源碼

發布時間: 2022-12-06 11:59:22

1. 期貨PMD值是怎麼意思

參照網路解釋
PMD是一種開源分析java代碼錯誤的工具。與其他分析工具不同的是,PMD通過靜態分析獲知代碼錯誤。也就是說,在不運行Java程序的情況下報告錯誤。PMD附帶了許多可以直接使用的規則,利用這些規則可以找出Java源程序的許多問題。此外,用戶還可以自己定義規則,檢查Java代碼是否符合某些特定的編碼規范。
PMD的核心是JavaCC解析器生成器。PMD結合運用JavaCC和EBNF(擴展巴科斯-諾爾範式,Extended Backus-Naur Formal)語法,再加上JJTree,把Java源代碼解析成抽象語法樹(AST,Abstract Syntax Tree)。
PMD是一款採用BSD協議發布的Java程序代碼檢查工具。該工具可以做到檢查Java代碼中是否含有未使用的變數、是否含有空的抓取塊、是否含有不必要的對象等。該軟體功能強大,掃描效率高
在期貨中應該是一種個人所設置的或者編程的一個期貨指標,或者就是
偏振模色散指單模光纖中偏振色散,簡稱PMD(=Polarization Mode Dispersion),是由光纖橫截面微小的不對稱性引起的色散。這種不對稱性引起兩個相互垂直的基本偏振模以不同的速度傳播。由於經歷了色散,即脈沖擴展,當接收器接收到這個合成的脈沖時要比發送端的脈沖寬。
起因於實際的單模光纖中基模含有兩個相互垂直的偏振模,沿光纖傳播過程中,由於光纖難免受到外部的作用,如溫度和壓力等因素變化或擾動,使得兩模式發生耦合,並且它們的傳播速度也不盡相同,從而導致光脈沖展寬,展寬量也不確定,便相當於隨機的色散。隨著傳輸速率的提高,該色散對通信系統的影響愈來愈明,而且越來越不可低估。有文獻給出由PMD限制的系統最大距離按公式:L最大值=1000/(PMD.比特率)2,式中:L單位為(根號)km,PMD單位為PS/KM,以及比特率單位為Gb/s。國際上一些標准組織,如IEC、TIA和ITU考慮制定這種隨機性色散的統計特性和相應的測試方法。

2. 電子商務里pmd公司指的是什麼意思呢

未來移動互聯網金融創業標准模式Pyramid selling Mix Direct selling(簡稱PMD)

PMD模式覆蓋的十大創業模式為:

(1)用低成本、新模式搶占移動支付市場;

(2)服務移動互聯網金融機構;

(3)瞄準游商機會;

(4)設置分層客戶,採用靈活費率;

(5)創造特色移動互聯網金融小門戶;

(6)移動安全;

(7)結合好地理位置、圈子、喜好等新特點做;

(8)移動互聯網金融營銷;

(9)建立企業移動互聯網金融一級市場;

(10)擁抱新金融的商業模式。

PMD的運用方法

(1)代理商運營模式本質是一個傳銷模型(P),但如果只制定代理商運營模式,必然無法創造實體性利潤,代理商將會在自身體系內陷入營收停滯的困局;

(2)點購商城的運營本質是一個直銷模型(D),但如果只憑點購商城的推動,無法快速達成直銷收益的效果,也難以創造整體模式的核心競爭力。

P端設計的缺點,在D端設計中產生了完美的補充,代理商通過點購商城的直銷,使代理商的分潤體系達成了運作的效果,在去除「概念化」之後,代理商金字塔梯隊真正成為了穩定營收的「分公司」。

D端設計的缺點,在P端中也產生了完美的補充,通付寶雄厚的分潤比例和穩定的實時分銷系統,為代理商的標准化、規模化推動創造了極大的驅動效應,進而為D端實際消費的增長提供了充分的助長力。

3. 如何用靜態分析工具分析java script 代碼

所有的這些新的工具使得確保代碼質量比以前簡單得多,不過您還需要知道如何使用它們。 代碼度量 「監視圈復雜度」展示如何使用簡單的代碼度量工具和基於 Java 的工具來監視代碼復雜度。 「軟體架構的代碼質量」解釋了如何持續地監視並糾正會影響軟體架構的長期生存能力的代碼質量方面。 「用代碼度量進行重構」介紹如何使用相同的代碼度量方法和提取方法模式進行有針對性的重構。 靜態分析工具 靜態分析工具承諾無需開發人員費勁就能找出代碼中已有的缺陷。當然,如果有多年的編寫經驗,就會知道這些承諾並不是一定能兌現。盡管如此,好的靜態分析工具仍然是工具箱中的無價之寶: FindBugs 是一個靜態分析工具,它檢查類或者 JAR 文件,將位元組碼與一組缺陷模式進行對比以發現可能的問題: 「FindBugs,第 1 部分」和「第 2 部分」分別介紹使用 FindBugs 的原因和方法以及如何編寫自定義檢測器以查找特定於應用程序的問題。 「消除 bug」展示了這個靜態分析工具如何幫助分析代碼。 「平衡測試,第 1 部分、第 2 部分 和第 3 部分」討論如何通過引進 FindBugs 靜態代碼分析工具來改進管理軟體質量的方式。 PMD 是一個開源的靜態分析工具,它分析 Java 源代碼,並找出潛在的 bug: 「用 PMD 鏟除 bug」解釋如何使用 PMD 內置的規則以及您自己定製的規則集來提高 Java 代碼質量。

4. 做靜態代碼分析都是用那個軟體的

本文首先介紹了靜態代碼分析的基本概念及主要技術,隨後分別介紹了現有 4 種主流 Java 靜態代碼分析工具 (Checkstyle,FindBugs,PMD,Jtest),最後從功能、特性等方面對它們進行分析和比較,希望能夠幫助 Java 軟體開發人員了解靜態代碼分析工具,並選擇合適的工具應用到軟體開發中。


引言

在 Java 軟體開發過程中,開發團隊往往要花費大量的時間和精力發現並修改代碼缺陷。Java 靜態代碼分析(static code analysis)工具能夠在代碼構建過程中幫助開發人員快速、有效的定位代碼缺陷並及時糾正這些問題,從而極大地提高軟體可靠性並節省軟體開發和測試成 本。目前市場上的 Java 靜態代碼分析工具種類繁多且各有千秋,因此本文將分別介紹現有 4 種主流 Java 靜態代碼分析工具 (Checkstyle,FindBugs,PMD,Jtest),並從功能、特性等方面對它們進行分析和比較,希望能夠幫助 Java 軟體開發人員了解靜態代碼分析工具,並選擇合適的工具應用到軟體開發中。

靜態代碼分析工具簡介

什麼是靜態代碼分析

靜態代碼分析是指無需運行被測代碼,僅通過分析或檢查源程序的語法、結構、過程、介面等來檢查程序的正確性,找出代碼隱藏的錯誤和缺陷,如參數不匹配,有歧義的嵌套語句,錯誤的遞歸,非法計算,可能出現的空指針引用等等。

在軟體開發過程中,靜態代碼分析往往先於動態測試之前進行,同時也可以作為制定動態測試用例的參考。統計證明,在整個軟體開發生命周期中,30% 至 70% 的代碼邏輯設計和編碼缺陷是可以通過靜態代碼分析來發現和修復的。

但是,由於靜態代碼分析往往要求大量的時間消耗和相關知識的積累,因此對於軟體開發團隊來說,使用靜態代碼分析工具自動化執行代碼檢查和分析,能夠極大地提高軟體可靠性並節省軟體開發和測試成本。

靜態代碼分析工具的優勢

1. 幫助程序開發人員自動執行靜態代碼分析,快速定位代碼隱藏錯誤和缺陷。

2. 幫助代碼設計人員更專注於分析和解決代碼設計缺陷。

3. 顯著減少在代碼逐行檢查上花費的時間,提高軟體可靠性並節省軟體開發和測試成本。


Java 靜態代碼分析理論基礎和主要技術

  • 缺陷模式匹配:缺陷模式匹配事先從代碼分析經驗中收集足夠多的共性缺陷模式,將待分析代碼與已有的共性缺陷模式進行模式匹配,從而完成軟體的安全分析。這種方式的優點是簡單方便,但是要求內置足夠多缺陷模式,且容易產生誤報。

  • 類型推斷:類型推斷技術是指通過對代碼中運算對象類型進行推理,從而保證代碼中每條語句都針對正確的類型執行。這種技術首先將預定義一套類型機制,包括類 型等價、類型包含等推理規則,而後基於這一規則進行推理計算。類型推斷可以檢查代碼中的類型錯誤,簡單,高效,適合代碼缺陷的快速檢測。

  • 模型檢查:模型檢驗建立於有限狀態自動機的概念基礎之上,這一理論將被分析代碼抽象為一個自動機系統,並且假設該系統是有限狀態的、或者是可以通過抽象歸 結為有限狀態。模型檢驗過程中,首先將被分析代碼中的每條語句產生的影響抽象為一個有限狀態自動機的一個狀態,而後通過分析有限狀態機從而達到代碼分析的 目的。模型檢驗主要適合檢驗程序並發等時序特性,但是對於數據值域數據類型等方面作用較弱。

  • 數據流分析:數據流分析也是一種軟體驗證技術,這種技術通過收集代碼中引用到的變數信息,從而分析變數在程序中的賦值、引用以及傳遞等情況。對數據流進行 分析可以確定變數的定義以及在代碼中被引用的情況,同時還能夠檢查代碼數據流異常,如引用在前賦值在後、只賦值無引用等。數據流分析主要適合檢驗程序中的 數據域特性。

  • 現有主流 Java 靜態分析工具

    Checkstyle

    Checkstyle 是 SourceForge 的開源項目,通過檢查對代碼編碼格式,命名約定,Javadoc,類設計等方面進行代碼規范和風格的檢查,從而有效約束開發人員更好地遵循代碼編寫規范。

    Checkstyle 提供了支持大多數常見 IDE 的插件,文本主要使用 Eclipse 中的 Checkstyle 插件。如下圖 1 所示,Checkstyle 對代碼進行編碼風格檢查,並將檢查結果顯示在 Problems 視圖中。圖中,代碼編輯器中每個放大鏡圖標表示一個 Checkstyle 找到的代碼缺陷。開發人員可通過在 Problems 視圖中查看錯誤或警告詳細信息。


  • 圖 1. 使用 Checkstyle 進行編碼風格檢查


  • 此外,Checkstyle 支持用戶根據需求自定義代碼檢查規范,在下圖 2 中的配置面板中,用戶可以在已有檢查規范如命名約定,Javadoc,塊,類設計等方面的基礎上添加或刪除自定義檢查規范。


  • 圖 2. 使用 Checkstyle 添加自定義代碼檢查規范


  • FindBugs

    FindBugs 是由馬里蘭大學提供的一款開源 Java 靜態代碼分析工具。FindBugs 通過檢查類文件或 JAR 文件,將位元組碼與一組缺陷模式進行對比從而發現代碼缺陷,完成靜態代碼分析。FindBugs 既提供可視化 UI 界面,同時也可以作為 Eclipse 插件使用。文本將主要使用將 FindBugs 作為 Eclipse 插件。在安裝成功後會在 eclipse 中增加 FindBugs perspective,用戶可以對指定 Java 類或 JAR 文件運行 FindBugs,此時 FindBugs 會遍歷指定文件,進行靜態代碼分析,並將代碼分析結果顯示在 FindBugs perspective 的 bugs explorer 中,如下圖 3 所示:


  • 圖 3. 使用 FindBugs 進行靜態代碼分析


  • 圖中 Bug Explorer 中的灰色圖標處為 Bug 類型,每種分類下紅色圖標表示 bug 較為嚴重,黃色的圖標表示 bug 為警告程度。Propreties 列出了 bug 的描述信息及修改方案。

    此外,FindBugs 還為用戶提供定製 Bug Pattern 的功能。用戶可以根據需求自定義 FindBugs 的代碼檢查條件,如下圖 4 所示:


  • 圖 4. 使用 FindBugs 添加自定義代碼檢查規范


  • PMD

    PMD 是由 DARPA 在 SourceForge 上發布的開源 Java 代碼靜態分析工具。PMD 通過其內置的編碼規則對 Java 代碼進行靜態檢查,主要包括對潛在的 bug,未使用的代碼,重復的代碼,循環體創建新對象等問題的檢驗。PMD 提供了和多種 Java IDE 的集成,例如 Eclipse,IDEA,NetBean 等。本文主要使用 PMD 以插件方式與 Eclipse 集成。如下圖 5 所示:在 Violations Overview 視圖中,按照代碼缺陷嚴重性集中顯示了 PMD 靜態代碼分析的結果。


  • 圖 5. 使用 PMD 進行靜態代碼分析


  • PMD 同樣也支持開發人員對代碼檢查規范進行自定義配置。開發人員可以在下圖 6 中的面板中添加、刪除、導入、導出代碼檢查規范。


  • 圖 6. 使用 PMD 添加自定義代碼檢查規范


  • Jtest

    Jtest 是 Parasoft 公司推出的一款針對 Java 語言的自動化代碼優化和測試工具,Jtest 的靜態代碼分析功能能夠按照其內置的超過 800 條的 Java 編碼規范自動檢查並糾正這些隱蔽且難以修復的編碼錯誤。同時,還支持用戶自定義編碼規則,幫助用戶預防一些特殊用法的錯誤。Jtest 提供了基於 Eclipse 的插件安裝。Jtest 支持開發人員對 Java 代碼進行編碼規范檢查,並在 Jtask 窗口中集中顯示檢查結果,如下圖 7 所示:


  • 圖 7. 使用 Jtest 進行靜態代碼分析


  • 同時,Jtest 還提供了對用戶定製代碼檢查配置甚至自定義編碼規則的支持,這一功能使得開發人員可以基於不同場景定製所需要的編碼規范,如圖 8 所示:


  • 圖 8. 使用 Jtest 添加自定義代碼檢查規范

  • Java 靜態分析工具對比

    本章節將從以下幾個方面對上述 Java 靜態分析工具進行比較:

    應用技術及分析對象

    下表 1 列出了不同工具的分析對象及應用技術對比:


  • 表 1. 不同工具的分析對象及應用技術對比

  • Java 靜態分析工具

    分析對象

    應用技術

    Checkstyle Java 源文件 缺陷模式匹配

    FindBugs 位元組碼 缺陷模式匹配;數據流分析

    PMD Java 源代碼 缺陷模式匹配

    Jtest Java 源代碼 缺陷模式匹配;數據流分析


    內置編程規范

    Checkstyle:

  • Javadoc 注釋:檢查類及方法的 Javadoc 注釋

  • 命名約定:檢查命名是否符合命名規范

  • 標題:檢查文件是否以某些行開頭

  • Import 語句:檢查 Import 語句是否符合定義規范

  • 代碼塊大小,即檢查類、方法等代碼塊的行數

  • 空白:檢查空白符,如 tab,回車符等

  • 修飾符:修飾符號的檢查,如修飾符的定義順序

  • 塊:檢查是否有空塊或無效塊

  • 代碼問題:檢查重復代碼,條件判斷,魔數等問題

  • 類設計:檢查類的定義是否符合規范,如構造函數的定義等問題

  • FindBugs:

  • Bad practice 壞的實踐:常見代碼錯誤,用於靜態代碼檢查時進行缺陷模式匹配

  • Correctness 可能導致錯誤的代碼,如空指針引用等

  • 國際化相關問題:如錯誤的字元串轉換

  • 可能受到的惡意攻擊,如訪問許可權修飾符的定義等

  • 多線程的正確性:如多線程編程時常見的同步,線程調度問題。

  • 運行時性能問題:如由變數定義,方法調用導致的代碼低效問題。

  • PMD:

  • 可能的 Bugs:檢查潛在代碼錯誤,如空 try/catch/finally/switch 語句

  • 未使用代碼(Dead code):檢查未使用的變數,參數,方法

  • 復雜的表達式:檢查不必要的 if 語句,可被 while 替代的 for 循環

  • 重復的代碼:檢查重復的代碼

  • 循環體創建新對象:檢查在循環體內實例化新對象

  • 資源關閉:檢查 Connect,Result,Statement 等資源使用之後是否被關閉掉

  • Jtest

  • 可能的錯誤:如內存破壞、內存泄露、指針錯誤、庫錯誤、邏輯錯誤和演算法錯誤等

  • 未使用代碼:檢查未使用的變數,參數,方法

  • 初始化錯誤:內存分配錯誤、變數初始化錯誤、變數定義沖突

  • 命名約定:檢查命名是否符合命名規范

  • Javadoc 注釋:檢查類及方法的 Javadoc 注釋

  • 線程和同步:檢驗多線程編程時常見的同步,線程調度問題

  • 國際化問題:

  • 垃圾回收:檢查變數及 JDBC 資源是否存在內存泄露隱患

  • 錯誤檢查能力

    為比較上述 Java 靜態分析工具的代碼缺陷檢測能力,本文將使用一段示例代碼進行試驗,示例代碼中將涵蓋我們開發中的幾類常見錯誤,如引用操作、對象操作、表達式復雜化、數 組使用、未使用變數或代碼段、資源回收、方法調用及代碼設計幾個方面。最後本文將分別記錄在默認檢查規范設置下,不同工具對該示例代碼的分析結果。以下為 示例代碼 Test.java。其中,代碼的注釋部分列舉了代碼中可能存在的缺陷。


  • 清單 1. Test.java 示例代碼
  • package Test;import java.io.*;public class Test {/** * Write the bytes from input stream to output stream. * The input stream and output stream are not closed. * @param is * @param os * @throws IOException */public boolean (InputStream is, OutputStream os)throws IOException {intcount = 0;//缺少空指針判斷byte[] buffer =new byte[1024];while((count = is.read(buffer)) >= 0) {os.write(buffer,0, count);}//未關閉I/O流returntrue;}/** * * @param a * @param b * @param ending * @return the elements from a to b, and stop when meet element ending */publicvoid (String[] a, String[] b, String ending){intindex;String temp =null;//空指針錯誤System.out.println(temp.length());//未使用變數intlength=a.length;for(index=0; index&a.length; index++){//多餘的if語句if(true){//對象比較 應使用equalsif(temp==ending){break;}//缺少 數組下標越界檢查b[index]=temp;}}}/** * * @param file * @return file contents as striwww.fltbj.cn#ll if file does not exist */public void readFile(File file) {InputStream is =null;OutputStream os =null;try{is =new BufferedInputStream(newFileInputStream(file));os =new ByteArrayOutputStream();//未使用方法返回值(is,os);is.close();os.close();}catch (IOException e) {//可能造成I/O流未關閉e.printStackTrace();}finally{//空的try/catch/finally塊}}}



  • 通過以上測試代碼,我們對已有 Java 靜態代碼分析工具的檢驗結果做了如下比較,如下表 2 所示。


  • 表 2. Java 靜態代碼分析工具對比

    代碼缺陷分類

    示例

    Checkstyle

    FindBugs

    PMD

    Jtest

    引用操作 空指針引用 √ √ √ √

    對象操作 對象比較(使用 == 而不是 equals) √ √ √

    表達式復雜化 多餘的 if 語句 √

    數組使用 數組下標越界 √

    未使用變數或代碼段 未使用變數 √ √ √

    資源回收 I/O 未關閉 √ √

    方法調用 未使用方法返回值 √

    代碼設計 空的 try/catch/finally 塊 √


    由表中可以看出幾種工具對於代碼檢查各有側重。其中,Checkstyle 更偏重於代碼編寫格式,及是否符合編碼規范的檢驗,對代碼 bug 的發現功能較弱;而 FindBugs,PMD,Jtest 著重於發現代碼缺陷。在對代碼缺陷檢查中,這三種工具在針對的代碼缺陷類別也各有不同,且類別之間有重疊。

    總結

    本文分別從功能、特性和內置編程規范等方面詳細介紹了包括 Checkstyle,FindBugs,PMD,Jtest 在內的四種主流 Java 靜態代碼分析工具,並通過一段 Java 代碼示例對這四種工具的代碼分析能力進行比較。由於這四種工具內置編程規范各有不同,因此它們對不同種類的代碼問題的發現能力也有所不同。其中 Checkstyle 更加偏重於代碼編寫格式檢查,而 FindBugs,PMD,Jtest 著重於發現代碼缺陷。最後,希望本文能夠幫助 Java 軟體開發和測試人員進一步了解以上四種主流 Java 靜態分析工具,並幫助他們根據需求選擇合適的工具。

5. PGD 功能解析

VPN :virtual page number.
PPN :physical page number.
PTE :page-table entries.
ASID :address space identifier.
PMA :Physical Memory Attributes
PMP :Physical Memory Protection
PGD :Page Global Directory
PUD :Page Upper Directory
PMD :Page Middle Directory
PT :Page Table
TVM :Trap Virtual Memory

4KB 的內存頁大小可能不是最佳的選擇,8KB 或者 16KB 說不定是更好的選擇,但是這是過去在特定場景下做出的權衡。我們在這篇文章中不要過於糾結於 4KB 這個數字,應該更重視決定這個結果的幾個因素,這樣當我們在遇到類似場景時才可以從這些方面考慮當下最佳的選擇,我們在這篇文章中會介紹以下兩個影響內存頁大小的因素,它們分別是:

每個進程能夠看到的都是獨立的虛擬內存空間,虛擬內存空間只是邏輯上的概念,進程仍然需要訪問虛擬內存對應的物理內存,從虛擬內存到物理內存的轉換就需要使用每個進程持有頁表。

在如上圖所示的四層頁表結構中,操作系統會使用最低的 12 位作為頁面的偏移量,剩下的 36 位會分四組分別表示當前層級在上一層中的索引,所有的虛擬地址都可以用上述的多層頁表查找到對應的物理地址 4 。

因為操作系統的虛擬地址空間大小都是一定的,整片虛擬地址空間被均勻分成了 N 個大小相同的內存頁,所以內存頁的大小最終會決定每個進程中頁表項的層級結構和具體數量,虛擬頁的大小越小,單個進程中的頁表項和虛擬頁也就越多。

因為目前的虛擬頁大小為 4096 位元組,所以虛擬地址末尾的 12 位可以表示虛擬頁中的地址,如果虛擬頁的大小降到了 512 位元組,那麼原本的四層頁表結構或者五層頁表結構會變成五層或者六層,這不僅會增加內存訪問的額外開銷,還會增加每個進程中頁表項佔用的內存大小。

PGD中包含若干PUD的地址,PUD中包含若干PMD的地址,PMD中又包含若干PT的地址。每一個頁表項指向一個頁框,頁框就是真正的物理內存頁。
PGD: Page Global Directory

mm_init() ---> fork.c 文件 ,源碼如下:

mm_init() 函數調用 mm_alloc_pgd() 函數與底層物理內存產生關系, mm_alloc_pgd() ---> fork.c 文件

pgd_alloc() ---> paglloc.h 這個函數為當前 pgd 分配一個 page ,並且將當前的 page 的首地址返回,並且將內
核GPG拷貝的當前進程的結構體中。函數中調用了 __get_free_page() ,獲取一個空間的物理頁保存當前進程信息, __get_free_page() 就是Kernel常用的 __get_free_pages() ,這樣子上層進程創建就與底層物理內存產生直接的關系,以上幾個函數源碼如下:

init_mm() ---> init_mm.c 結構體記錄了當前 root table 的所有信息, swapper_pg_dir 是存放PGD 全局信息的全局變數,源碼如下在 init_mm.c 文件中,源碼如下:

這樣一來,每個進程的頁面目錄就分成了兩部分,第一部分為「用戶空間」,用來映射其整個進程空間 (0x0000 0000-0xBFFF FFFF) 即3G位元組的虛擬地址;第二部分為「系統空間」,用來映射 (0xC000 0000-0xFFFF FFFF)1G 位元組的虛擬地址。可以看出 Linux 系統中每個進程的頁面目錄的第二部分是相同的,所以從進程的角度來看,每個進程有 4G 位元組的虛擬空間,較低的 2G 位元組是自己的用戶空間,最高的 2G 位元組則為與所有進程以及內核共享的系統空間。每個進程有它自己的 PGD( Page Global Directory) ,它是一個物理頁,並包含一個 pgd_t 數組。

An Sv32 virtual address is partitioned into a virtual page number (VPN) and page offset, as shown in
Figure 4.15.

satp寄存器的組成:

虛擬地址轉換為物理地址轉換過程如下:
每一個應用程序都有自己的Page Global Directory(PGD),其保存物理地址的頁幀,在<asm/page.h>中定義了pgd_t 結構體數組,不同的架構有不同的PGD載入方式。

A virtual address va is translated into a physical address pa as follows:

當虛擬地址沒有映射物理地址,最典型就是用戶態 Malloc 一段虛擬地址後, Linux 並沒有為這段虛擬地址分配物理地址,而是當用寫這段虛擬地址時, Linux Kernel 發生 PageFault 才會為這段虛擬地址映射物理內存,大概的過程就是這樣,但是其中 Linux Kernel 產生缺頁異常到映射物理的過程則是非常復雜的一個過程,其中涉及到很重要的一個函數就是缺頁中斷服務函數,在 RISC-V 中叫 do_page_fault() 在 arch/risv-v/mm/fault.c 文件中定義了該函數。

do_page_fault() 函數實現如下:

6. 程序靜態分析的用法

關於IDE以及plugin如何使用在此不做介紹,本文主要關注它們如何與ant配合使用,使這些工具成為每次構建過程中的有機組成。 PMD的運行環境是j2se1.3或以後版本,安裝過程同樣也是解壓即可。對應ant task的使用:
1. 把lib中所有的jar復制到項目的classpath中。
2. 將pmd-2.0.jar中的rulesets解壓到指定目錄,這裡面定義了分析所需要的規則集合。
3. 修改build.xml文件。在這一版本中,提供了2個ant task。一個是pmd使用規則集合進行分析;另一個是檢查代碼中Copy & Paste代碼。這2個任務對應的ant task使用:
PMD任務:
<target name=pmd>
<!-- 定義任務和任務所屬類所在的classpath引用 -->
<taskdef name=pmd classname=net.sourceforge.pmd.ant.PMDTask
classpathref=classpath/>
<!-- 檢查使用的規則文件 -->
<pmd rulesetfiles=junit_lib/rulesets/imports.xml>
<!-- 輸出格式和文件名 -->
<formatter type=html toFile=pmd_report.html/>
<!-- pmd所需要依賴包的classpath引用 -->
<classpath refid=classpath/>
<!-- 要檢查的項目源文件根目錄 -->
<fileset dir=src>
<include name=**/*.java/>
</fileset>
</pmd>
</target>
CPD任務:
<target name=cpd>
<!-- 定義任務和任務所屬類所在的classpath -->
<taskdef name=cpd classname=net.sourceforge.pmd.cpd.CPDTask
classpathref=classpath/>
<!-- 指明輸出文件和判斷屬於 & paste的標准 -->
<cpd minimumTokenCount=100 outputFile=cpd.txtl>
<!-- 要檢查的項目源文件根目錄 -->
<fileset dir=src>
<include name=**/*.java/>
</fileset>
</cpd>
</target>
4. 運行ant pmd和ant cpd即可。
5. 參數說明:
- formatter,指明輸出格式和文件。
- rulesetfiles,指明分析所需的規則文件,不同文件使用逗號分隔。
- failonerror,pmd執行出錯是否中止構建過程。
- failOnRuleViolation,如果與規則沖突,是否中止構建過程。
- classpath,pmd所需的classpath。
- printToConsole,在發現問題時是否列印到ant log或控制台。
- shortFilenames,在輸出報告中是否使用短文件名。
- targetjdk13,是否把目標定為jdk13,如不能使用assert。
- failuresPropertyName,在任務結束時,插入違反規則的號碼
- encoding,讀源文件時所採用的編碼,如utf-8。
關於規則集合的說明,以及如何自定義規則請參見pmd的文檔,文檔中已說得相當清楚。 使用ant task:
1. 復制checkstyle-all-3.3.jar到項目的classpath中。
2. 修改build.xml文件:
<taskdef resource=checkstyletask.properties
classpath=${weblib.dir}/checkstyle-all-3.3.jar/>
<target name=checkstyle depends=init>
<!-- 指明checkstyle的分析所需的規則文件 -->
<checkstyle config=checkstyle33.xml>
<!-- 要檢查的文件 -->
<fileset dir=${src.code} includes=**/*.java/>
<!-- 指明輸出格式和文件名 -->
<formatter type=xml toFile=report.xml/>
</checkstyle>
<!-- 將xml文件轉換成html文件 -->
<style in=report.xml out=report.html style=checkstyle-frames/>
</target>
3. 運行ant checkstyle即可。
checkstyle的規則文件,即項目的代碼規范,建議不要手工書寫。可以使用checkstyle plug in在Eclipse配置後再導出。Checkstyle提供了預設的xslt,用來進行xml的格式轉換。它們都放在contrib目錄中。Checkstyle同樣也提供了自定義的check,但與PMD相比,書寫要復雜。詳細情況請參見checkstyle的文檔。 BlueMorpho是獨立運行的B/S程序,安裝簡單,無需額外配置參數文件。 在Windows下運行Bluemorpho windows安裝包,注意有32位和64位兩個版本, 安裝完成後,在開始-程序-BlueMorpho文件夾里運行Sart bluemorho server啟動分析server. Server啟動後,在開始-程序-BlueMorpho文件夾里運行BlueMorpho即可訪問閃蝶源碼分析平台。 BlueMoropho提供兩種方式上傳source code, 手工上傳和同步從Mainframe下載COBOL源碼。 代碼上傳或下載到BlueMorpho以後,即可點擊任意程序進行源碼分析。

7. GitHub上面有哪些經典的java框架源碼

  • 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

    用來幫助創建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

  • 資源

    社區

8. 如何提高 Android 代碼質量

(1)插件安裝
在Android Studio中選擇Preferences -> Plugins,輸入查找findBugs進行插件安裝。
(2)插件使用
在build.gradle文件中,按照下面步驟進行設置:
添加plugin apply plugin:』findbugs』
定義任務,指定輸出格式
這里要注意因為findBugs是檢查class文件,所以在定義task的時候,是dependsOn: 「assembleDebug」,確保運行findbugs的task能夠成功檢測。
通過gradle findbugs方式,在工程目錄下運行命令,檢測完成後,會在制定的目錄下生成報告文檔。文檔支持xml和html兩種格式,本文設置的是html格式,可以直接用瀏覽器打開。
當然,和lint一樣,findBugs也支持手動檢測的方式。
在工程里,右鍵 FindBugs -> (選擇檢測的范圍)。檢測完之後,底部工具欄會跳到FindBugs-IEDA下。
3
PMD

PMD是一個很有用的工具,它跟Findbugs類似,但是它不是檢測位元組碼,它是直接檢測源代碼。它使用靜態分析來發現錯誤。

為什麼要將它們同時使用呢?因為它們的檢測方法不同,可以取到互補的作用。

檢測范圍
可能的bug——空的try/catch/finally/switch塊。
無用代碼(Dead code):無用的本地變數,方法參數和私有方法。
空的if/while語句。
過度復雜的表達式——不必要的if語句,本來可以用while循環但是卻用了for循環。
可優化的代碼:浪費性能的String/StringBuffer的使用。

(1)插件安裝

同樣可以通過AS的plugin進行安裝,推薦安裝QAPlug-PMD。

(2)插件使用

在build.gradle文件中進行如下配置

導入Plugin:apply plugin: 『pmd』
Task配置

4
CheckStyles

這個工具用來自動檢測java源碼。啟動之後,可以按照制定的規則對java源碼進行檢查,被將所有的不符合規范的地方生成報告通知給你。

檢測范圍
註解
javadoc注釋
命名規范
文件頭
導入包規范
尺寸設置
空格
正則表達式
修飾符
代碼塊
編碼問題
類設計問題
重復、度量以及一些雜項

總而言之,是一些代碼規范問題!!

(1)插件安裝

通過AS的Plugin進行安裝

(2)插件使用

導入Plugin
apply plugin: 『checkstyle』
設置CheckStyle的版本
checkstyle {
toolVersion 『6.1.1』
showViolations true
}
配置任務

5
插件的接入與使用

檢測范圍
lint、PMD、findBugs和CheckStyle檢測范圍之和。

(1)插件安裝

下載整合插件的文件包(文末),和app工程目錄同級放置。
在app的build.gradle文件導入整合插件腳本
apply from: 『../config/quality.gradle』

(2)插件使用

修改quality.gradle 的appDir欄位,設置檢測的工程目錄
// 應用目錄名稱def appDir = 「app-k12」
進入工程根目錄,運行gradle check,檢測完成後,會在build/reports下生成相應的檢測報告文件。當然也可以按照每個插件的使用方式單獨使用。

9. 如何更好地利用Pmd,Findbugs和CheckStyle分析結果

這里列出了很多Java靜態分析工具,每一種工具關注一個特定的能發揮自己特長的領域,我們可以列舉一下:
Pmd 它是一個基於靜態規則集的Java源碼分析器,它可以識別出潛在的如下問題:
– 可能的bug——空的try/catch/finally/switch塊。
– 無用代碼(Dead code):無用的本地變數,方法參數和私有方法。
– 空的if/while語句。
– 過度復雜的表達式——不必要的if語句,本來可以用while循環但是卻用了for循環。
– 可優化的代碼:浪費性能的String/StringBuffer的使用。
FindBugs 它用來查找Java代碼中存在的bug。它使用靜態分析方法標識出Java程序中上百種潛在的不同類型的錯誤。
Checkstyle 它定義了一系列可用的模塊,每一個模塊提供了嚴格程度(強制的,可選的…)可配置的檢查規則。規則可以觸發通知(notification),警告(warning)和錯誤(error)。
現在有很多查看這些工具的處理結果的方式:
XML格式:這些工具都可以產生XML文件,這些XML文件能用來產生HTML報表或者是被別的工具用來瀏覽分析的結果。
HTML格式:HTML格式是最受歡迎的產生報表和團隊間分享的的方式,你也可以用xsl表格創建你自己的報表。
IDE插件:幾乎所有叫得上名字的IDE都給這些工具提供了插件,這使得發現源碼中存在的所有問題幾乎變成可能。
代碼質量工具的一個問題是,它們有時候會給開發者提示很多不是錯誤的錯誤-也叫做假陽性(false positives)。當這種情況發生的時候,開發者可以學著忽略工具的輸出信息,或者是把這些輸出全部拋棄掉。
為了更好的利用這些工具的輸出結果,給開發者一個更有用的視圖,最好是有一種只關注我們想要的東西的方式。本文中,我們將找出其他有趣的方式來更好的利用所有這些有名的Java靜態分析工具的輸出結果,然後可以像查詢資料庫那樣查詢這些結果。
JArchitect和CQLinq
JArchitect是另一個靜態分析工具,它彌補了其他工具(的不足),它是使用一種基於Linq(CQLinq)的代碼查詢語言像查詢資料庫那樣來查詢代碼。
JArchitect3的以前版本,只能查詢從JArchitect提取出來的分析數據,但是從JArchitect4開始,可以把許多其他靜態分析工具的輸出結果包含進來,然後使用CQLinq做查詢。
讓我們以PDT核心(Eclipse的Php插件)的源碼為例來說明如何在JArchitect中利用好這些靜態工具的分析結果。
在查詢分析結果以前,要遵守以下幾個步驟:
第一步:
用PMD,CPD,FindBugs和CheckStyle分析項目工程,生成包含分析結果的XML文件。
第二步:
用JArchitect分析項目工程。
第三步:
在JArchitect點擊菜單「插件(Plugins)」->「導入插件結果文件(Import Plugins Result Files)」把所有的XML文件導入到JArchitect中。
JArchitect默認給這些工具提供了許多有用的查詢,並且這些查詢都是可以很簡單的進行定製的。

10. PMD拜託各位了 3Q

PMD有很多種意思 具體如下 一、物理介質關聯層介面 萬兆乙太網的物理(PHY)層規范和所支持的光學部件部分在IEEE802.3ae中定義。在乙太網標准中,光學部件部分被稱為「物理介質關聯層介面(PMD-Physical Media Dependent)」。 二、偏振模色散 偏振模色散 指單模光纖中偏振色散,簡稱PMD(=Polarization Mode Dispersion),是由光纖橫截面微小的不對稱性引起的色散。這種不對稱性引起兩個相互垂直的基本偏振模以不同的速度傳播。由於經歷了色散,即脈沖擴展,當接收器接收到這個合成的脈沖時要比發送端的脈沖寬。 起因於實際的單模光纖中基模含有兩個相互垂直的偏振模,沿光纖傳播過程中,由於光纖難免受到外部的作用,如溫度和壓力等因素變化或擾動,使得兩模式發生耦合,並且它們的傳播速度也不盡相同,從而導致光脈沖展寬,展寬量也不確定,便相當於隨機的色散。隨著傳輸速率的提高,該色散對通信系統的影響愈來愈明,而且越來越不可低估。有文獻給出由PMD限制的系統最大距離按公式:L最大值=1000/(PMD.比特率)2,式中:L單位為(根號)km,PMD單位為PS/KM,以及比特率單位為Gb/s。國際上一些標准組織,如IEC、TIA和ITU考慮制定這種隨機性色散的統計特性和相應的測試方法。在數字傳輸系統中,PMD的主要影響是產生碼間干擾。 三、MikuMikuDance模型文件 MikuMikuDance是日本人樋口優所開發,將VOCALOID2的初音未來等角色製作3D模組的免費軟體。 簡稱為MMD。 所用模型文件即為pmd格式 四 便攜多媒休辭典 PMD:portable multimedia dictionary 便攜多媒體辭典 目前市面流通的電子辭典。以2.4寸、2.8寸、3.5寸居多。TFT真彩色320*240分辨 五 北京金字塔藝術中心--PMD 北京金字塔藝術連鎖中心通過多年的努力與論證,2010年正式推出了《金字塔教學模式》,本教學模式是一套嚴格的4年課程(學生上課與練習時間較少需延長課程至8年以上),通過本模式正規培訓的學生均取得了優異的成績,北京金字塔藝術中心教學宗旨:「培養國內一流鼓手,發掘未來音樂大師,為國內打擊樂事業的發展壯大貢獻自己的力量」《金字塔教學模式》顧名思義:首先我們找到塔尖級世界一流鼓手需要具備哪些素質,其次我們論證他們的方法並且結合大量的理論依據與實踐數據,總結出可行最佳執行方案,最後我們把自己的學員從塔底開始,一步步塑造成未來的大師。讓每一個來中心學習的學員都得到最正規的培訓,少走彎路、早日成功。金字塔教學模式高級課程是總部投資的背景音樂,每首5000元以上,均為國內頂級音樂製作人中國最知名吉他大師汶麟先生親自用吉他錄制,本公司擁有背景音樂的版權。 六 架子鼓品牌-外置可調音量架子鼓 PMD-外置可調音量架子鼓解決了困擾多年的架子鼓擾民問題 七 飛機上的多媒體娛樂系統PMD PMD是擁有7英寸液晶屏、外觀優雅簡潔的手持式娛樂設備,操作簡單便捷,超大容量能容納30多部電影、2000多分鍾電視節目、500多首歌曲以及各類中外名著。南航航班上有配備。 八 軟體行業的JAVA代碼靜態分析工具 PMD是一種開源分析Java代碼錯誤的工具。與其他分析工具不同的是,PMD通過靜態分析獲知代碼錯誤。也就是說,在不運行Java程序的情況下報告錯誤。PMD附帶了許多可以直接使用的規則,利用這些規則可以找出Java源程序的許多問題。此外,用戶還可以自己定義規則,檢查Java代碼是否符合某些特定的編碼規范。 PMD的核心是JavaCC解析器生成器。PMD結合運用JavaCC和EBNF(擴展巴科斯-諾爾範式,Extended Backus-Naur Formal)語法,再加上JJTree,把Java源代碼解析成抽象語法樹(AST,Abstract Syntax Tree)。 PMD是一款採用BSD協議發布的Java程序代碼檢查工具。該工具可以做到檢查Java代碼中是否含有未使用的變數、是否含有空的抓取塊、是否含有不必要的對象等。該軟體功能強大,掃描效率高,是Java程序員debug的好幫手。 PMD支持的編輯器包括: JDeveloper、Eclipse、JEdit、JBuilder、BlueJ、CodeGuide、NetBeans/Sun Java Studio Enterprise/Creator、IntelliJ IDEA、TextPad、Maven、Ant,、Gel、JCreator和Emacs。 九PMD 產品組合決策 PMD(Proct Mix Decision),產品組合決策。是指在一定資源約束條件下,企業該如何安排產品組合,以實現一定時間內收益最大化的問題。

採納哦

熱點內容
安卓手機怎麼關閉原圖 發布:2023-02-05 16:04:37 瀏覽:57
c語言銀行利率 發布:2023-02-05 16:01:26 瀏覽:393
so編譯器版本 發布:2023-02-05 15:50:56 瀏覽:387
c語言編程規則 發布:2023-02-05 15:50:44 瀏覽:800
電動拉閘門遙控器怎麼配置 發布:2023-02-05 15:42:57 瀏覽:832
交通訪問 發布:2023-02-05 15:42:54 瀏覽:256
安卓手機如何知道自己去了哪裡 發布:2023-02-05 15:42:06 瀏覽:318
垃圾壓縮液 發布:2023-02-05 15:41:59 瀏覽:858
安卓10支持哪個聖安地列斯 發布:2023-02-05 15:34:11 瀏覽:704
mutexpython 發布:2023-02-05 15:33:55 瀏覽:464