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ı?
cevap
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.
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. –
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. –
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). –
- 1. Herhangi bir guava genel görünümü var mı?
- 2. Iterables yazdırmak için herhangi bir tek işlevi var mı
- 3. SqlJ'nin herhangi bir Java 8 destekli sürümü var mı?
- 4. C# için Guava var mı?
- 5. Java kıyaslama aracı
- 6. PHP'nin http_build_query işlevinin herhangi bir Java karşılığı var mı?
- 7. Tomcat'e herhangi bir IIS eşdeğeri var mı?
- 8. Java Applet'leri için herhangi bir eklenti çerçevesi var mı?
- 9. Yerleştirilebilir herhangi bir basit Java FTP Server kütüphanesi var mı?
- 10. Küçük resimler için herhangi bir java kütüphanesi var mı?
- 11. Java işlemine gömülü çalışabilen herhangi bir MQ sunucusu var mı?
- 12. SQL'i biçimlendirmek için herhangi bir java kütüphanesi var mı?
- 13. Herhangi bir sprite koleksiyonunu bilen var mı?
- 14. Java 8'de kuyruk arama optimizasyonu var mı?
- 15. Java 8
- 16. Guava bağımlılığının kavanoz büyüklüğü - küçük bir versiyonu var mı?
- 17. Java 8. ilgili bir sorum var dize
- 18. Herhangi bir Java hash ağacı uygulaması mı?
- 19. Java 8'de Java 8, Java 7
- 20. Grup ile sayımın java ile gerçekleştirilmesi 8
- 21. java 8 - dere, harita ve java 8 akışları ile ayrı
- 22. Çevresinde herhangi bir ScalaConsole var mı?
- 23. Herhangi bir getNLMultibutton kitaplığı var mı?
- 24. Herhangi bir FACEBOX alt türü var mı?
- 25. configure.ac ve configure.in ile Makefile.am ve Makefile.in arasındaki herhangi bir fark var mı?
- 26. Java 8 ile bir takvim oluşturmak istiyorum
- 27. Eclipse GMF ile ilgili herhangi bir deneyimi var mı?
- 28. Sunucu ile ".sync" öğreten herhangi bir Backbone.js öğreticisi var mı?
- 29. Libclang ile ilgili herhangi bir eğitim var mı?
- 30. SSEPlus ile ilgili herhangi bir deneyimi var mı?
Eh, kullanım durumlarınız var mı? Eğer evetse, – fge
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. –
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. –