1 /* 2 * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package org.openjdk.bench.java.util.stream.pipeline; 26 27 import org.openjdk.jmh.annotations.Benchmark; 28 import org.openjdk.jmh.annotations.BenchmarkMode; 29 import org.openjdk.jmh.annotations.Mode; 30 import org.openjdk.jmh.annotations.OutputTimeUnit; 31 import org.openjdk.jmh.annotations.Param; 32 import org.openjdk.jmh.annotations.Scope; 33 import org.openjdk.jmh.annotations.State; 34 35 import java.util.concurrent.TimeUnit; 36 import java.util.stream.LongStream; 37 38 /** 39 * Benchmark tests the pipeline construction costs. 40 */ 41 @BenchmarkMode(Mode.AverageTime) 42 @OutputTimeUnit(TimeUnit.NANOSECONDS) 43 @State(Scope.Thread) 44 public class PipelineSetup { 45 46 /** 47 * This is one of the few benchmarks where measuring running time makes sense. 48 */ 49 50 @Param("100000") 51 private int size; 52 53 @Benchmark 54 public Object baseline_newObject() { 55 return new Object(); 56 } 57 58 @Benchmark 59 public LongStream seq_test00() { 60 return LongStream.range(0, size); 61 } 62 63 @Benchmark 64 public LongStream seq_test01() { 65 return LongStream.range(0, size) 66 .filter((x) -> false); 67 } 68 69 @Benchmark 70 public LongStream seq_test02() { 71 return LongStream.range(0, size) 72 .filter((x) -> false) 73 .filter((x) -> false); 74 } 75 76 @Benchmark 77 public LongStream seq_test04() { 78 return LongStream.range(0, size) 79 .filter((x) -> false) 80 .filter((x) -> false) 81 .filter((x) -> false) 82 .filter((x) -> false); 83 } 84 85 @Benchmark 86 public LongStream seq_test08() { 87 return LongStream.range(0, size) 88 .filter((x) -> false) 89 .filter((x) -> false) 90 .filter((x) -> false) 91 .filter((x) -> false) 92 93 .filter((x) -> false) 94 .filter((x) -> false) 95 .filter((x) -> false) 96 .filter((x) -> false); 97 } 98 99 @Benchmark 100 public LongStream seq_test16() { 101 return LongStream.range(0, size) 102 .filter((x) -> false) 103 .filter((x) -> false) 104 .filter((x) -> false) 105 .filter((x) -> false) 106 107 .filter((x) -> false) 108 .filter((x) -> false) 109 .filter((x) -> false) 110 .filter((x) -> false) 111 112 .filter((x) -> false) 113 .filter((x) -> false) 114 .filter((x) -> false) 115 .filter((x) -> false) 116 117 .filter((x) -> false) 118 .filter((x) -> false) 119 .filter((x) -> false) 120 .filter((x) -> false); 121 } 122 123 @Benchmark 124 public LongStream par_test00() { 125 return LongStream.range(0, size).parallel(); 126 } 127 128 @Benchmark 129 public LongStream par_test01() { 130 return LongStream.range(0, size).parallel() 131 .filter((x) -> false); 132 } 133 134 @Benchmark 135 public LongStream par_test02() { 136 return LongStream.range(0, size).parallel() 137 .filter((x) -> false) 138 .filter((x) -> false); 139 } 140 141 @Benchmark 142 public LongStream par_test04() { 143 return LongStream.range(0, size).parallel() 144 .filter((x) -> false) 145 .filter((x) -> false) 146 .filter((x) -> false) 147 .filter((x) -> false); 148 } 149 150 @Benchmark 151 public LongStream par_test08() { 152 return LongStream.range(0, size).parallel() 153 .filter((x) -> false) 154 .filter((x) -> false) 155 .filter((x) -> false) 156 .filter((x) -> false) 157 158 .filter((x) -> false) 159 .filter((x) -> false) 160 .filter((x) -> false) 161 .filter((x) -> false); 162 } 163 164 @Benchmark 165 public LongStream par_test16() { 166 return LongStream.range(0, size).parallel() 167 .filter((x) -> false) 168 .filter((x) -> false) 169 .filter((x) -> false) 170 .filter((x) -> false) 171 172 .filter((x) -> false) 173 .filter((x) -> false) 174 .filter((x) -> false) 175 .filter((x) -> false) 176 177 .filter((x) -> false) 178 .filter((x) -> false) 179 .filter((x) -> false) 180 .filter((x) -> false) 181 182 .filter((x) -> false) 183 .filter((x) -> false) 184 .filter((x) -> false) 185 .filter((x) -> false); 186 } 187 188 }