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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

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

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

在嘗試使Java在計(jì)算機(jī)語(yǔ)言基準(zhǔn)測(cè)試游戲的regexdna挑戰(zhàn)中排名第一時(shí),我正在研究Java正則表達(dá)式庫(kù)的性能。 我可以找到的最新網(wǎng)站是2010年的tusker.org 。因此,我決定使用Java Microbenchmarking Harness重做測(cè)試并發(fā)布結(jié)果(破壞性警告:某些非傳統(tǒng)的解決方案使Java排名第一)。

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

現(xiàn)在,對(duì)于一些總結(jié)性能的圖表–該測(cè)試是在帶有OpenJDK 1.8.0_66的64位Ubuntu 15.10計(jì)算機(jī)上運(yùn)行的:

觀察結(jié)果

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

使用的庫(kù)的完整列表:

庫(kù)名稱和版本(發(fā)布年份) 在Maven Central中可用 執(zhí)照 平均操作/秒 平均操作/秒(大文本) 通過(guò)測(cè)試
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) 沒有 藝術(shù)許可 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許可證


如果要重新運(yùn)行測(cè)試,請(qǐng)簽出源代碼并按以下方式運(yùn)行它:

# 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

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

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。