2015-05-04 10 views
15

Java 8'de Guava ile yeterince mutluyum - sıralı kod için Akımlara geçişte herhangi bir performans avantajı veya tuzak var mı?Java 8 Streams ile Guava Iterables arasındaki herhangi bir kıyaslama var mı?

+2

Eh, kullanım durumlarınız var mı? Eğer evetse, – fge

+3

malzemesini mikro-işaretlemeyi deneyebilirsiniz. JIT, Java 8'deki Akışlar için önemli ölçüde optimize edilmiştir. Kodunuzu değiştirmese bile, Java 8 JVM'yi kullanmalısınız. Bu daha az çaba ile daha fazla fark yaratabilir. –

+1

Ben, kullanım durumlarımı kıyaslayabilirim, ancak değirmen kodunun çalışması için Streams veya Iterables'a varsayılan ayarlamaya karar vermemde yardımcı olacak bir araştırma yapmayı tercih ederim. –

cevap

3

Bununla oynamak için a project on GitHub başlattım.

ilk sonuçlar Yayınları için şaşırtıcı olumludur - dizeleri üzerinde bir kimlik haritası için Java HotSpot (TM) 64-bit sunucu VM 2014 MacBookAir 1.7GHz i7, kod versiyonunu https://github.com/dmcg/iterables-v-streams#ea8498ee0627fc59834001a837fa92fba4bcf47ebcf47e

(25.25-B02, karışık mod kurmak)
 

Experiment selection: 
    Benchmark Methods: [guava, iterate, streams] 
    Instruments: [allocation, runtime] 
    User parameters: {} 
    Virtual machines: [default] 
    Selection type: Full cartesian product 

This selection yields 6 experiments. 
Trial Report (1 of 6): 
    Experiment {instrument=allocation, benchmarkMethod=iterate, vm=default, parameters={}} 
    Results: 
    bytes(B): min=4072.00, 1st qu.=4072.00, median=4072.00, mean=4072.00, 3rd qu.=4072.00, max=4072.00 
    objects: min=3.00, 1st qu.=3.00, median=3.00, mean=3.00, 3rd qu.=3.00, max=3.00 
Trial Report (2 of 6): 
    Experiment {instrument=allocation, benchmarkMethod=guava, vm=default, parameters={}} 
    Results: 
    bytes(B): min=15104.00, 1st qu.=15104.00, median=15104.00, mean=15104.00, 3rd qu.=15104.00, max=15104.00 
    objects: min=17.00, 1st qu.=17.00, median=17.00, mean=17.00, 3rd qu.=17.00, max=17.00 
Trial Report (3 of 6): 
    Experiment {instrument=allocation, benchmarkMethod=streams, vm=default, parameters={}} 
    Results: 
    bytes(B): min=15272.00, 1st qu.=15272.00, median=15272.00, mean=15527.64, 3rd qu.=15432.00, max=17252.80 
    objects: min=20.00, 1st qu.=20.00, median=20.00, mean=25.00, 3rd qu.=26.00, max=53.00 
Trial Report (4 of 6): 
    Experiment {instrument=runtime, benchmarkMethod=guava, vm=default, parameters={}} 
    Results: 
    runtime(ns): min=13365.32, 1st qu.=13660.61, median=13802.51, mean=13961.91, 3rd qu.=14445.46, max=14715.34 
Trial Report (5 of 6): 
    Experiment {instrument=runtime, benchmarkMethod=iterate, vm=default, parameters={}} 
    Results: 
    runtime(ns): min=9952.47, 1st qu.=10892.64, median=11372.35, mean=11243.07, 3rd qu.=11785.48, max=12024.76 
Trial Report (6 of 6): 
    Experiment {instrument=runtime, benchmarkMethod=streams, vm=default, parameters={}} 
    Results: 
    runtime(ns): min=10527.26, 1st qu.=11051.70, median=11747.29, mean=11631.15, 3rd qu.=12205.97, max=12581.39 
Collected 81 measurements from: 
    2 instrument(s) 
    2 virtual machine(s) 
    3 benchmark(s) 

Execution complete: 1.188 min. 
Results have been uploaded. View them at: https://microbenchmarks.appspot.com/runs/d2c7f83b-2cfa-4217-ab0b-e8d506eaa85c 

Hala başımı Google kaliperleri etrafında alıyorum, ancak Akımların Guava'dan daha hızlı olduğunu ve düz bir döngüden çok daha yavaş olmadığını öne sürüyormuş gibi görünüyor.

+2

Kaliper, doğruluk sorunlarından, örn. Döngünün açılmasından dolayı. [JMH] (http://openjdk.java.net/projects/code-tools/jmh) tercih edilen kıyaslama aracıdır. –

+0

Dammit Google ile gitmek güvenli olduğunu düşündüm. Yine de, bu döngünün açılmasını farzediyorum, burada çok fazla fark olmaz. –

+2

Bu, ölü kod eliminasyonu dahil olmak üzere birçok kusurdan biriydi (bir değer döndürmediğinizden). Kaliper, Bloch'un [Performans Kaygısı] (https://www.parleys.com/play/2103), Click'in [Karşılaştırma Sanatı] (http://www.azulsystems.com/events/javaone_2009/session/ adresinden) tavsiyesine dayanıyordu. 2009_J1_Benchmark.pdf) ve Android ekibinden geribildirim. Hiç kimse bir VM mühendisi değildi, basit bir koşum taklit eder ve karmaşık senaryolar için (iş parçacığı gibi) faydasızdır. Blog yayınları için daha iyi bir varsayılan değerdi ve regresyonlar için akıl sağlığı kontrolü yapıldı, ancak ciddi çalışmalar için kullanılamaz (örneğin, Guava'lar çoğunlukla anlamsızdır). –

İlgili konular