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

歡迎訪問 生活随笔!

生活随笔

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

java

Java 7 vs Groovy 2.1性能比较

發(fā)布時(shí)間:2023/12/3 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 7 vs Groovy 2.1性能比较 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

自從我與Grails上一次接觸以來(lái),我已經(jīng)有兩年沒有使用Groovy了。 我陷入(硬)核心企業(yè)Java中,并且在后臺(tái)遇到了一些性能方面的問題。 我?guī)缀蹂e(cuò)過了學(xué)習(xí)Spock的機(jī)會(huì),但是幸運(yùn)的是, 華沙Java用戶組幫助我擺脫了一些舊系統(tǒng),恢復(fù)了正常的自我開發(fā)。 實(shí)際上,我希望Spock或Geb之類的框架能夠通過使它們更容易,更有效來(lái)改變編寫測(cè)試的方法。 這兩個(gè)框架都使用Groovy以及構(gòu)建工具中的新國(guó)王– Gradle 。 看到Groovy的速度如何影響我們的日常工作,我決定仔細(xì)研究它的性能,并將其與Java 7進(jìn)行比較。

我的測(cè)試環(huán)境基于Java 1.7.0_25和Groovy 2.1.6。 和以往一樣,我在1.0-beta-1版本(幾乎穩(wěn)定)中使用了Caliper ,并準(zhǔn)備了許多(我希望)具有代表性的微基準(zhǔn)。

基于Fork / Join框架的第一個(gè)基準(zhǔn)測(cè)試在兩種語(yǔ)言中應(yīng)該是最相似的,因?yàn)樗褂昧艘恍┍緳C(jī)機(jī)制。 我的測(cè)試使用一些隨機(jī)的int數(shù)據(jù)初始化了數(shù)組,然后使用框架查找數(shù)組中的最大元素。 在Groovy中,我的計(jì)算函數(shù)如下所示:

@Override Integer compute() {def size = end - startif (size == 1) {Math.max(array[start], array[end])} else {int diff = size / 2MaxValueSeeker left = new MaxValueSeeker(array, start, start + diff)left.fork()MaxValueSeeker right = new MaxValueSeeker(array, start + diff, end)Math.max(right.compute(), left.join())} }

Java版本當(dāng)然非常相似。 經(jīng)過十幾分鐘的測(cè)量,我得到了非常可喜的結(jié)果:Groovy僅慢了8倍。

現(xiàn)在是時(shí)候在日常開發(fā)中檢查一些更現(xiàn)實(shí)的情況了。 我選擇了簡(jiǎn)單的POJO / POGO(是的),并進(jìn)行了一些簡(jiǎn)單的操作,只是為了確保JIT不會(huì)消除我的代碼(相信我,他喜歡這樣做)。 Groovy中我的偽“業(yè)務(wù)邏輯”方法:

def int proceed(int reps) {List<GroovyPojo> list = new ArrayList<>()int sum = 0;reps.times {// first param is int and second is Stringlist.add(new GroovyPojo(value: it, stringValue: it))}list.each {if (Integer.parseInt(it.stringValue) == it.value) {sum += it.value}}sum }

Java版本的主要區(qū)別在于POJO構(gòu)造函數(shù)中的getter和手動(dòng)String boxing。 在閱讀新聞上又花了十幾分鐘時(shí)間,而這一次Groovy僅慢了7倍

最后的測(cè)試應(yīng)具有壓力,并在更復(fù)雜的計(jì)算中檢查兩種語(yǔ)言。 我下定決心,選擇了快速排序算法。 循環(huán)很少,如果if語(yǔ)句不起作用。 我不會(huì)在此處復(fù)制粘貼,因?yàn)檫@是眾所周知的解決方案。 值得一提的是計(jì)時(shí)結(jié)果,幾乎是Groovy的5倍! 但是我已經(jīng)進(jìn)行了一些谷歌搜索,并注意到Groovy 2.0引入了@CompileStatic批注,這應(yīng)該給我們帶來(lái)一些額外的性能提升。 因此,讓我們檢查一下……是的,通過靜態(tài)編譯,Java的優(yōu)勢(shì)下降到了220%。

在下表中,您可以找到詳細(xì)的結(jié)果。 總結(jié)一下–我不確定在關(guān)鍵任務(wù)功能中使用Groovy是個(gè)好主意,但絕對(duì)是實(shí)現(xiàn)測(cè)試,原型設(shè)計(jì)等的絕佳解決方案。讓我強(qiáng)調(diào)一下,在Caliovy中編寫Caliper的結(jié)果解析器大約需要6行(解析json,迭代測(cè)量并計(jì)算平均值)

性能比較

方法 Java [ns] Groovy [ns] 因子
叉/連接 22.132 181.018 8.18
波霍斯 117.914 856.337 7.26
快速排序 68.728 330.159 4.80
使用@CompileStatic的Quicksort 67.752 147.792 2.18

參考:來(lái)自Java(B)Log博客的JCG合作伙伴 Jakub Kubrynski的Java 7 vs Groovy 2.1性能比較 。

翻譯自: https://www.javacodegeeks.com/2013/09/java-7-vs-groovy-2-1-performance-comparison.html

總結(jié)

以上是生活随笔為你收集整理的Java 7 vs Groovy 2.1性能比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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