Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/micro/org/openjdk/bench/java/io/ObjectStreamClasses.java
41161 views
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.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
package org.openjdk.bench.java.io;
24
25
import org.openjdk.jmh.annotations.Benchmark;
26
import org.openjdk.jmh.annotations.BenchmarkMode;
27
import org.openjdk.jmh.annotations.Mode;
28
import org.openjdk.jmh.annotations.OutputTimeUnit;
29
import org.openjdk.jmh.annotations.Scope;
30
import org.openjdk.jmh.annotations.Setup;
31
import org.openjdk.jmh.annotations.State;
32
import org.openjdk.jmh.infra.Blackhole;
33
34
import java.io.ObjectStreamClass;
35
import java.io.Serializable;
36
import java.util.LinkedList;
37
import java.util.concurrent.TimeUnit;
38
39
/**
40
* A micro benchmark used to measure the performance impact from multi threaded access to ObjectStreamClass.
41
*/
42
@BenchmarkMode(Mode.AverageTime)
43
@OutputTimeUnit(TimeUnit.NANOSECONDS)
44
@State(Scope.Thread)
45
public class ObjectStreamClasses {
46
47
public Class<?>[] classes;
48
49
@Setup
50
public void setup() {
51
LinkedList<Class> queue = new LinkedList<Class>();
52
int i = 0;
53
while (true) {
54
// Loop until we get a ClassNotFoundException
55
// Maybe rewrite this considering the fact that there are 29
56
// inner classes available?
57
try {
58
Class clazz = Class.forName(ObjectStreamClasses.class.getName() + "$SerializableClass" + i++);
59
queue.add(clazz);
60
} catch (ClassNotFoundException e) {
61
break;
62
}
63
}
64
classes = new Class[queue.size()];
65
66
// Make ObjectStreamClass load all classes into the static map
67
i = 0;
68
while (!queue.isEmpty()) {
69
classes[i] = (Class) queue.remove();
70
i++;
71
}
72
}
73
74
/**
75
* Tests the static lookup function. Depending on JRE version the internal behavior is different but the general
76
* behavior is a synchronized call to some sort of static container.
77
*/
78
@Benchmark
79
public void testLookup(Blackhole bh) {
80
for (Class<?> klass : classes) {
81
bh.consume(ObjectStreamClass.lookup(klass));
82
}
83
}
84
85
static class SerializableClass0 extends SerializableClass {
86
private static final long serialVersionUID = 1L;
87
}
88
89
static class SerializableClass1 extends SerializableClass {
90
private static final long serialVersionUID = 1L;
91
}
92
93
static class SerializableClass2 extends SerializableClass {
94
private static final long serialVersionUID = 1L;
95
}
96
97
static class SerializableClass3 extends SerializableClass {
98
private static final long serialVersionUID = 1L;
99
}
100
101
static class SerializableClass4 extends SerializableClass {
102
private static final long serialVersionUID = 1L;
103
}
104
105
static class SerializableClass5 extends SerializableClass {
106
private static final long serialVersionUID = 1L;
107
}
108
109
static class SerializableClass6 extends SerializableClass {
110
private static final long serialVersionUID = 1L;
111
}
112
113
static class SerializableClass7 extends SerializableClass {
114
private static final long serialVersionUID = 1L;
115
}
116
117
static class SerializableClass8 extends SerializableClass {
118
private static final long serialVersionUID = 1L;
119
}
120
121
static class SerializableClass9 extends SerializableClass {
122
private static final long serialVersionUID = 1L;
123
}
124
125
static class SerializableClass10 extends SerializableClass {
126
private static final long serialVersionUID = 1L;
127
}
128
129
static class SerializableClass11 extends SerializableClass {
130
private static final long serialVersionUID = 1L;
131
}
132
133
static class SerializableClass12 extends SerializableClass {
134
private static final long serialVersionUID = 1L;
135
}
136
137
static class SerializableClass13 extends SerializableClass {
138
private static final long serialVersionUID = 1L;
139
}
140
141
static class SerializableClass14 extends SerializableClass {
142
private static final long serialVersionUID = 1L;
143
}
144
145
static class SerializableClass15 extends SerializableClass {
146
private static final long serialVersionUID = 1L;
147
}
148
149
static class SerializableClass16 extends SerializableClass {
150
private static final long serialVersionUID = 1L;
151
}
152
153
static class SerializableClass17 extends SerializableClass {
154
private static final long serialVersionUID = 1L;
155
}
156
157
static class SerializableClass18 extends SerializableClass {
158
private static final long serialVersionUID = 1L;
159
}
160
161
static class SerializableClass19 extends SerializableClass {
162
private static final long serialVersionUID = 1L;
163
}
164
165
static class SerializableClass20 extends SerializableClass {
166
private static final long serialVersionUID = 1L;
167
}
168
169
static class SerializableClass21 extends SerializableClass {
170
private static final long serialVersionUID = 1L;
171
}
172
173
static class SerializableClass22 extends SerializableClass {
174
private static final long serialVersionUID = 1L;
175
}
176
177
static class SerializableClass23 extends SerializableClass {
178
private static final long serialVersionUID = 1L;
179
}
180
181
static class SerializableClass24 extends SerializableClass {
182
private static final long serialVersionUID = 1L;
183
}
184
185
static class SerializableClass25 extends SerializableClass {
186
private static final long serialVersionUID = 1L;
187
}
188
189
static class SerializableClass26 extends SerializableClass {
190
private static final long serialVersionUID = 1L;
191
}
192
193
static class SerializableClass27 extends SerializableClass {
194
private static final long serialVersionUID = 1L;
195
}
196
197
static class SerializableClass28 extends SerializableClass {
198
private static final long serialVersionUID = 1L;
199
}
200
201
static class SerializableClass29 extends SerializableClass {
202
private static final long serialVersionUID = 1L;
203
}
204
205
@SuppressWarnings("unused")
206
private static class SerializableClass implements Serializable {
207
208
private static final long serialVersionUID = 6107539118220989250L;
209
public Object objectField00 = new Object();
210
public Object objectField01 = new Object();
211
public Object objectField02 = new Object();
212
public Object objectField03 = new Object();
213
public Object objectField04 = new Object();
214
public Object objectField05 = new Object();
215
public Object objectField06 = new Object();
216
public Object objectField07 = new Object();
217
public Object objectField08 = new Object();
218
public Object objectField09 = new Object();
219
public Object objectField10 = new Object();
220
public Object objectField11 = new Object();
221
public Object objectField12 = new Object();
222
public Object objectField13 = new Object();
223
public Object objectField14 = new Object();
224
public Object objectField15 = new Object();
225
public Object objectField16 = new Object();
226
public Object objectField17 = new Object();
227
public Object objectField18 = new Object();
228
public Object objectField19 = new Object();
229
public Object objectField20 = new Object();
230
public Object objectField21 = new Object();
231
public Object objectField22 = new Object();
232
public Object objectField23 = new Object();
233
public Object objectField24 = new Object();
234
public Object objectField25 = new Object();
235
public Object objectField26 = new Object();
236
public Object objectField27 = new Object();
237
public Object objectField28 = new Object();
238
public Object objectField29 = new Object();
239
240
SerializableClass() {
241
super();
242
}
243
}
244
}
245
246