Path: blob/master/test/micro/org/openjdk/bench/java/io/ObjectStreamClasses.java
41161 views
/*1* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/22package org.openjdk.bench.java.io;2324import org.openjdk.jmh.annotations.Benchmark;25import org.openjdk.jmh.annotations.BenchmarkMode;26import org.openjdk.jmh.annotations.Mode;27import org.openjdk.jmh.annotations.OutputTimeUnit;28import org.openjdk.jmh.annotations.Scope;29import org.openjdk.jmh.annotations.Setup;30import org.openjdk.jmh.annotations.State;31import org.openjdk.jmh.infra.Blackhole;3233import java.io.ObjectStreamClass;34import java.io.Serializable;35import java.util.LinkedList;36import java.util.concurrent.TimeUnit;3738/**39* A micro benchmark used to measure the performance impact from multi threaded access to ObjectStreamClass.40*/41@BenchmarkMode(Mode.AverageTime)42@OutputTimeUnit(TimeUnit.NANOSECONDS)43@State(Scope.Thread)44public class ObjectStreamClasses {4546public Class<?>[] classes;4748@Setup49public void setup() {50LinkedList<Class> queue = new LinkedList<Class>();51int i = 0;52while (true) {53// Loop until we get a ClassNotFoundException54// Maybe rewrite this considering the fact that there are 2955// inner classes available?56try {57Class clazz = Class.forName(ObjectStreamClasses.class.getName() + "$SerializableClass" + i++);58queue.add(clazz);59} catch (ClassNotFoundException e) {60break;61}62}63classes = new Class[queue.size()];6465// Make ObjectStreamClass load all classes into the static map66i = 0;67while (!queue.isEmpty()) {68classes[i] = (Class) queue.remove();69i++;70}71}7273/**74* Tests the static lookup function. Depending on JRE version the internal behavior is different but the general75* behavior is a synchronized call to some sort of static container.76*/77@Benchmark78public void testLookup(Blackhole bh) {79for (Class<?> klass : classes) {80bh.consume(ObjectStreamClass.lookup(klass));81}82}8384static class SerializableClass0 extends SerializableClass {85private static final long serialVersionUID = 1L;86}8788static class SerializableClass1 extends SerializableClass {89private static final long serialVersionUID = 1L;90}9192static class SerializableClass2 extends SerializableClass {93private static final long serialVersionUID = 1L;94}9596static class SerializableClass3 extends SerializableClass {97private static final long serialVersionUID = 1L;98}99100static class SerializableClass4 extends SerializableClass {101private static final long serialVersionUID = 1L;102}103104static class SerializableClass5 extends SerializableClass {105private static final long serialVersionUID = 1L;106}107108static class SerializableClass6 extends SerializableClass {109private static final long serialVersionUID = 1L;110}111112static class SerializableClass7 extends SerializableClass {113private static final long serialVersionUID = 1L;114}115116static class SerializableClass8 extends SerializableClass {117private static final long serialVersionUID = 1L;118}119120static class SerializableClass9 extends SerializableClass {121private static final long serialVersionUID = 1L;122}123124static class SerializableClass10 extends SerializableClass {125private static final long serialVersionUID = 1L;126}127128static class SerializableClass11 extends SerializableClass {129private static final long serialVersionUID = 1L;130}131132static class SerializableClass12 extends SerializableClass {133private static final long serialVersionUID = 1L;134}135136static class SerializableClass13 extends SerializableClass {137private static final long serialVersionUID = 1L;138}139140static class SerializableClass14 extends SerializableClass {141private static final long serialVersionUID = 1L;142}143144static class SerializableClass15 extends SerializableClass {145private static final long serialVersionUID = 1L;146}147148static class SerializableClass16 extends SerializableClass {149private static final long serialVersionUID = 1L;150}151152static class SerializableClass17 extends SerializableClass {153private static final long serialVersionUID = 1L;154}155156static class SerializableClass18 extends SerializableClass {157private static final long serialVersionUID = 1L;158}159160static class SerializableClass19 extends SerializableClass {161private static final long serialVersionUID = 1L;162}163164static class SerializableClass20 extends SerializableClass {165private static final long serialVersionUID = 1L;166}167168static class SerializableClass21 extends SerializableClass {169private static final long serialVersionUID = 1L;170}171172static class SerializableClass22 extends SerializableClass {173private static final long serialVersionUID = 1L;174}175176static class SerializableClass23 extends SerializableClass {177private static final long serialVersionUID = 1L;178}179180static class SerializableClass24 extends SerializableClass {181private static final long serialVersionUID = 1L;182}183184static class SerializableClass25 extends SerializableClass {185private static final long serialVersionUID = 1L;186}187188static class SerializableClass26 extends SerializableClass {189private static final long serialVersionUID = 1L;190}191192static class SerializableClass27 extends SerializableClass {193private static final long serialVersionUID = 1L;194}195196static class SerializableClass28 extends SerializableClass {197private static final long serialVersionUID = 1L;198}199200static class SerializableClass29 extends SerializableClass {201private static final long serialVersionUID = 1L;202}203204@SuppressWarnings("unused")205private static class SerializableClass implements Serializable {206207private static final long serialVersionUID = 6107539118220989250L;208public Object objectField00 = new Object();209public Object objectField01 = new Object();210public Object objectField02 = new Object();211public Object objectField03 = new Object();212public Object objectField04 = new Object();213public Object objectField05 = new Object();214public Object objectField06 = new Object();215public Object objectField07 = new Object();216public Object objectField08 = new Object();217public Object objectField09 = new Object();218public Object objectField10 = new Object();219public Object objectField11 = new Object();220public Object objectField12 = new Object();221public Object objectField13 = new Object();222public Object objectField14 = new Object();223public Object objectField15 = new Object();224public Object objectField16 = new Object();225public Object objectField17 = new Object();226public Object objectField18 = new Object();227public Object objectField19 = new Object();228public Object objectField20 = new Object();229public Object objectField21 = new Object();230public Object objectField22 = new Object();231public Object objectField23 = new Object();232public Object objectField24 = new Object();233public Object objectField25 = new Object();234public Object objectField26 = new Object();235public Object objectField27 = new Object();236public Object objectField28 = new Object();237public Object objectField29 = new Object();238239SerializableClass() {240super();241}242}243}244245246