日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java正则表达式库基准测试– 2015年

發布時間:2023/12/3 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java正则表达式库基准测试– 2015年 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在嘗試使Java在計算機語言基準測試游戲的regexdna挑戰中排名第一時,我正在研究Java正則表達式庫的性能。 我可以找到的最新網站是2010年的tusker.org 。因此,我決定使用Java Microbenchmarking Harness重做測試并發布結果(破壞性警告:某些非傳統的解決方案使Java排名第一)。

TL; DR :正則表達式非常適合臨時查詢,但是如果您對性能敏感,則應手動編寫解決方案代碼(這并不意味著您必須從絕對零開始–例如,Google Guava庫包含一些不錯的實用程序 ,可以幫助編寫可讀性強的代碼。

現在,對于一些總結性能的圖表–該測試是在帶有OpenJDK 1.8.0_66的64位Ubuntu 15.10計算機上運行的:

觀察結果

  • 正則表達式沒有“標準”,因此當給定特定的正則表達式和特定的字符串以進行匹配時,不同的庫可能會有不同的行為-即。 一個可能會說它匹配,但另一個可能會說它不匹配。 例如,即使我使用了一組減少的測試用例(針對6個字符串檢查了5個正則表達式),也只有兩個庫設法正確地匹配/不正確地匹配它們(其中一個是java.util.Pattern)。
  • 要使您的正則表達式正確,可能需要不止一次的嘗試(例如regexpal或Regex Coach之類的工具對于實驗非常有用)
  • 正則表達式的性能很難預測(有時它可能會基于輸入長度而呈指數復雜性 )–因此,如果您接受Internet上任意用戶的正則表達式(例如搜索引擎,例如允許使用正則表達式進行搜索)
  • 似乎沒有一個庫正在積極開發中(事實上, tusker.org上原始列表中的許多庫現在不可用),而且其中許多庫都比內置的juPattern慢 ,因此, 如果使用正則表達式,可能是首選。
  • 這么說,硬件以及兩者的性能JVM已經相當大,因此,如果您正在使用這些庫之一,它通常是運行一個數量級的速度比它是在五年前。 因此,無需快速替換工作代碼(除非您的探查器說這是個問題:-))
  • 注意循環中對String.split的調用。 盡管它針對特定情況(例如一字符正則表達式)進行了一些優化,但您幾乎應該始終:
    • 看看是否可以使用Google Guava的Splitter之類的工具
  • 這兩個驚喜是dk.brics.automaton ,它的表現比其他所有產品都要好幾個數量級,但是:
    • 最新版本是2011年,似乎是一個學術項目
  • 另一個驚喜是kmy.regex.util.Regex ,盡管自2000年以來未進行更新,但它的性能優于java.util.Pattern,并且通過了所有測試(當然并沒有很多測試)。

使用的庫的完整列表:

庫名稱和版本(發布年份) 在Maven Central中可用 執照 平均操作/秒 平均操作/秒(大文本) 通過測試
j.util.Pattern 1.8(2015) 否(JRE附帶) JRE許可證 19689 22144 5之5
dk.brics.automaton.Automaton 1.11-8(2011) BSD 2 600 225 115374276 5分之2
org.apache.regexp 1.4(2005) 阿帕奇(?) 6738 16895 5之4
com.stevesoft.pat.Regex 1.5.3(2009) LGPL v3 4191 859 5之4
net.sourceforge.jregex 1.2_01(2002) BSD 57811 3573 5之4
kmy.regex.util.Regex 0.1.2(2000) 沒有 藝術許可 217803 38184 5之5
org.apache.oro.text.regex.Perl5Matcher 2.0.8(2003) 阿帕奇2.0 31906 2383 5之4
gnu.regexp.RE 1.1.4(2005?) GPL(?) 11848 1509 5之4
com.basistech.tclre.RePattern 0.13.6(2015) 阿帕奇2.0 11598 43 5之3
com.karneim.util.collection.regex.Pattern 1.1.1(2005?) 5分之2
org.apache.xerces.impl.xpath.regex.RegularExpression 2.11.0(2014) 阿帕奇2.0 5之4
com.ibm.regex.RegularExpression 1.0.2(不再可用) 沒有
RegularExpression.RE 1.1(不再可用) 沒有
gnu.rex.Rex嗎? (不再可用) 沒有
monq.jfa.Regexp 1.1.1(不再可用) 沒有
com.ibm.icu.text.UnicodeSet(ICU4J) 56.1(2015) ICU許可證


如果要重新運行測試,請簽出源代碼并按以下方式運行它:

# we need to skip tests since almost all libraries fail a test or an other mvn -Dmaven.test.skip=true clean package # run the benchmarks java -cp lib/jint.jar:target/benchmarks.jar net.greypanther.javaadvent.regex.RegexBenchmarks

最后, 計算機語言基準游戲的regexdna挑戰如何? 我通過使用位操作檢查8字節的塊(如果它們可能匹配),從而使Java達到了#1的水平,然后僅對正則表達式進行了測試。 如前所述:如果要提高性能,則需要編寫自定義解析器。

翻譯自: https://www.javacodegeeks.com/2015/12/java-regular-expression-library-benchmarks-2015.html

總結

以上是生活随笔為你收集整理的Java正则表达式库基准测试– 2015年的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。