1
1
package com .baeldung .string ;
2
2
3
+ import com .google .common .base .Splitter ;
3
4
import org .apache .commons .lang3 .StringUtils ;
4
5
import org .openjdk .jmh .annotations .*;
5
6
import org .openjdk .jmh .runner .Runner ;
6
7
import org .openjdk .jmh .runner .options .Options ;
7
8
import org .openjdk .jmh .runner .options .OptionsBuilder ;
8
9
10
+ import java .util .ArrayList ;
9
11
import java .util .List ;
12
+ import java .util .StringTokenizer ;
10
13
import java .util .concurrent .TimeUnit ;
14
+ import java .util .regex .Pattern ;
11
15
12
16
@ BenchmarkMode (Mode .SingleShotTime )
13
17
@ OutputTimeUnit (TimeUnit .MILLISECONDS )
14
- @ Measurement (batchSize = 10000 , iterations = 10 )
15
- @ Warmup (batchSize = 10000 , iterations = 10 )
16
- public class StringPerformance extends StringPerformanceHints {
18
+ @ Measurement (batchSize = 100000 , iterations = 10 )
19
+ @ Warmup (batchSize = 100000 , iterations = 10 )
20
+ @ State (Scope .Thread )
21
+ public class StringPerformance {
22
+
23
+ protected String baeldung = "baeldung" ;
24
+ protected String longString = "Hello baeldung, I am a bit longer than other Strings" ;
25
+ protected String formatString = "hello %s, nice to meet you" ;
26
+ protected String formatDigit = "%d" ;
27
+ protected String emptyString = " " ;
28
+ protected String result = "" ;
29
+
30
+ protected int sampleNumber = 100 ;
31
+
32
+ protected Pattern spacePattern = Pattern .compile (emptyString );
33
+ protected Pattern longPattern = Pattern .compile (longString );
34
+ protected List <String > stringSplit = new ArrayList <>();
35
+ protected List <String > stringTokenizer = new ArrayList <>();
17
36
18
37
@ Benchmark
19
38
public String benchmarkStringDynamicConcat () {
20
- return dynamicConcat ();
39
+ result += baeldung ;
40
+ return result ;
21
41
}
22
42
23
43
@ Benchmark
@@ -36,27 +56,30 @@ public StringBuffer benchmarkStringBuffer() {
36
56
37
57
@ Benchmark
38
58
public String benchmarkStringConstructor () {
39
- return stringConstructor ();
59
+ String result = new String ("baeldung" );
60
+ return result ;
40
61
}
41
62
42
63
@ Benchmark
43
64
public String benchmarkStringLiteral () {
44
- return stringLiteral ();
65
+ String result = "baeldung" ;
66
+ return result ;
45
67
}
46
68
47
69
@ Benchmark
48
70
public String benchmarkStringFormat_s () {
49
- return stringFormat_s ( );
71
+ return String . format ( formatString , baeldung );
50
72
}
51
73
52
74
@ Benchmark
53
75
public String benchmarkStringConcat () {
54
- return stringConcat ();
76
+ result = result .concat (baeldung );
77
+ return result ;
55
78
}
56
79
57
80
@ Benchmark
58
81
public String benchmarkStringIntern () {
59
- return stringIntern ();
82
+ return baeldung . intern ();
60
83
}
61
84
62
85
@ Benchmark
@@ -71,85 +94,95 @@ public String benchmarkStringUtilsReplace() {
71
94
72
95
@ Benchmark
73
96
public List <String > benchmarkGuavaSplitter () {
74
- return guavaSplitter ();
97
+ return Splitter .on (" " ).trimResults ()
98
+ .omitEmptyStrings ()
99
+ .splitToList (longString );
75
100
}
76
101
77
102
@ Benchmark
78
103
public String [] benchmarkStringSplit () {
79
- return stringSplit ( );
104
+ return longString . split ( emptyString );
80
105
}
81
106
82
107
@ Benchmark
83
108
public String [] benchmarkStringSplitPattern () {
84
- return stringSplitPattern ( );
109
+ return spacePattern . split ( longString , 0 );
85
110
}
86
111
87
112
@ Benchmark
88
113
public List benchmarkStringTokenizer () {
89
- return stringTokenizer ();
114
+ StringTokenizer st = new StringTokenizer (longString );
115
+ while (st .hasMoreTokens ()) {
116
+ stringTokenizer .add (st .nextToken ());
117
+ }
118
+ return stringTokenizer ;
90
119
}
91
120
92
121
@ Benchmark
93
122
public List benchmarkStringIndexOf () {
94
- return stringIndexOf ();
123
+ int pos = 0 , end ;
124
+ while ((end = longString .indexOf (' ' , pos )) >= 0 ) {
125
+ stringSplit .add (longString .substring (pos , end ));
126
+ pos = end + 1 ;
127
+ }
128
+ return stringSplit ;
95
129
}
96
130
97
-
98
131
@ Benchmark
99
132
public String benchmarkIntegerToString () {
100
- return stringIntegerToString ( );
133
+ return Integer . toString ( sampleNumber );
101
134
}
102
135
103
136
@ Benchmark
104
137
public String benchmarkStringValueOf () {
105
- return stringValueOf ( );
138
+ return String . valueOf ( sampleNumber );
106
139
}
107
140
108
141
109
142
@ Benchmark
110
143
public String benchmarkStringConvertPlus () {
111
- return stringConvertPlus () ;
144
+ return sampleNumber + "" ;
112
145
}
113
146
114
147
@ Benchmark
115
148
public String benchmarkStringFormat_d () {
116
- return stringFormat_d ( );
149
+ return String . format ( formatDigit , sampleNumber );
117
150
}
118
151
119
152
@ Benchmark
120
153
public boolean benchmarkStringEquals () {
121
- return stringEquals ( );
154
+ return longString . equals ( baeldung );
122
155
}
123
156
124
157
125
158
@ Benchmark
126
159
public boolean benchmarkStringEqualsIgnoreCase () {
127
- return stringEqualsIgnoreCase ( );
160
+ return longString . equalsIgnoreCase ( baeldung );
128
161
}
129
162
130
163
@ Benchmark
131
164
public boolean benchmarkStringMatches () {
132
- return stringIsMatch ( );
165
+ return longString . matches ( baeldung );
133
166
}
134
167
135
168
@ Benchmark
136
169
public boolean benchmarkPrecompiledMatches () {
137
- return precompiledMatches ();
170
+ return longPattern . matcher ( baeldung ). matches ();
138
171
}
139
172
140
173
@ Benchmark
141
174
public int benchmarkStringCompareTo () {
142
- return stringCompareTo ( );
175
+ return longString . compareTo ( baeldung );
143
176
}
144
177
145
178
@ Benchmark
146
179
public boolean benchmarkStringIsEmpty () {
147
- return stringIsEmpty ();
180
+ return longString . isEmpty ();
148
181
}
149
182
150
183
@ Benchmark
151
184
public boolean benchmarkStringLengthZero () {
152
- return stringLengthZero () ;
185
+ return longString . length () == 0 ;
153
186
}
154
187
155
188
public static void main (String [] args ) throws Exception {
0 commit comments