Hello! Seems that currently Stream.findFirst is not optimized for unordered source. I think it should work as findAny in this case. Here's a small patch which fixes this:
http://cr.openjdk.java.net/~tvaleev/patches/findFirst/find_patch.txt Simple JMH test: http://cr.openjdk.java.net/~tvaleev/patches/findFirst/FindTest.java Original: http://cr.openjdk.java.net/~tvaleev/patches/findFirst/jmh_out_orig.txt # JMH 1.11.2 (released 85 days ago) # VM version: JDK 9-ea, VM 9-ea+99-2015-12-23-183325.javare.4146.nc Benchmark Mode Cnt Score Error Units FindTest.findAny avgt 30 12439,631 ± 1787,866 us/op FindTest.findAnyUnordered avgt 30 12923,080 ± 1072,537 us/op FindTest.findFirst avgt 30 48047,467 ± 2713,489 us/op FindTest.findFirstUnordered avgt 30 52648,893 ± 3934,682 us/op Patched: http://cr.openjdk.java.net/~tvaleev/patches/findFirst/jmh_out_patched.txt Benchmark Mode Cnt Score Error Units FindTest.findAny avgt 30 11312,238 ± 386,627 us/op FindTest.findAnyUnordered avgt 30 12136,953 ± 1536,817 us/op FindTest.findFirst avgt 30 47517,776 ± 2844,607 us/op FindTest.findFirstUnordered avgt 30 13147,492 ± 1140,592 us/op If you think it's a reasonable thing to patch, I can log an issue, generate webrev and check whether jtreg tests pass. With best regards, Tagir Valeev.