1 /* 2 * Copyright (c) 1999, 2008, 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 24 /* 25 * 26 */ 27 28 package bench.serial; 29 30 import bench.Benchmark; 31 import java.io.ObjectInputStream; 32 import java.io.ObjectOutputStream; 33 import java.io.ObjectStreamClass; 34 import java.io.Serializable; 35 36 /** 37 * Benchmark for testing speed of class descriptor reads/writes. 38 */ 39 public class ClassDesc implements Benchmark { 40 41 static class Dummy0 implements Serializable { Dummy0 i0; } 42 static class Dummy1 extends Dummy0 { Dummy1 i1; } 43 static class Dummy2 extends Dummy1 { Dummy2 i2; } 44 static class Dummy3 extends Dummy2 { Dummy3 i3; } 45 static class Dummy4 extends Dummy3 { Dummy4 i4; } 46 static class Dummy5 extends Dummy4 { Dummy5 i5; } 47 static class Dummy6 extends Dummy5 { Dummy6 i6; } 48 static class Dummy7 extends Dummy6 { Dummy7 i7; } 49 static class Dummy8 extends Dummy7 { Dummy8 i8; } 50 static class Dummy9 extends Dummy8 { Dummy9 i9; } 51 static class Dummy10 extends Dummy9 { Dummy10 i10; } 52 static class Dummy11 extends Dummy10 { Dummy11 i11; } 53 static class Dummy12 extends Dummy11 { Dummy12 i12; } 54 static class Dummy13 extends Dummy12 { Dummy13 i13; } 55 static class Dummy14 extends Dummy13 { Dummy14 i14; } 56 static class Dummy15 extends Dummy14 { Dummy15 i15; } 57 static class Dummy16 extends Dummy15 { Dummy16 i16; } 58 static class Dummy17 extends Dummy16 { Dummy17 i17; } 59 static class Dummy18 extends Dummy17 { Dummy18 i18; } 60 static class Dummy19 extends Dummy18 { Dummy19 i19; } 61 static class Dummy20 extends Dummy19 { Dummy20 i20; } 62 static class Dummy21 extends Dummy20 { Dummy21 i21; } 63 static class Dummy22 extends Dummy21 { Dummy22 i22; } 64 static class Dummy23 extends Dummy22 { Dummy23 i23; } 65 static class Dummy24 extends Dummy23 { Dummy24 i24; } 66 static class Dummy25 extends Dummy24 { Dummy25 i25; } 67 static class Dummy26 extends Dummy25 { Dummy26 i26; } 68 static class Dummy27 extends Dummy26 { Dummy27 i27; } 69 static class Dummy28 extends Dummy27 { Dummy28 i28; } 70 static class Dummy29 extends Dummy28 { Dummy29 i29; } 71 static class Dummy30 extends Dummy29 { Dummy30 i30; } 72 static class Dummy31 extends Dummy30 { Dummy31 i31; } 73 static class Dummy32 extends Dummy31 { Dummy32 i32; } 74 static class Dummy33 extends Dummy32 { Dummy33 i33; } 75 static class Dummy34 extends Dummy33 { Dummy34 i34; } 76 static class Dummy35 extends Dummy34 { Dummy35 i35; } 77 static class Dummy36 extends Dummy35 { Dummy36 i36; } 78 static class Dummy37 extends Dummy36 { Dummy37 i37; } 79 static class Dummy38 extends Dummy37 { Dummy38 i38; } 80 static class Dummy39 extends Dummy38 { Dummy39 i39; } 81 static class Dummy40 extends Dummy39 { Dummy40 i40; } 82 static class Dummy41 extends Dummy40 { Dummy41 i41; } 83 static class Dummy42 extends Dummy41 { Dummy42 i42; } 84 static class Dummy43 extends Dummy42 { Dummy43 i43; } 85 static class Dummy44 extends Dummy43 { Dummy44 i44; } 86 static class Dummy45 extends Dummy44 { Dummy45 i45; } 87 static class Dummy46 extends Dummy45 { Dummy46 i46; } 88 static class Dummy47 extends Dummy46 { Dummy47 i47; } 89 static class Dummy48 extends Dummy47 { Dummy48 i48; } 90 static class Dummy49 extends Dummy48 { Dummy49 i49; } 91 static class Dummy50 extends Dummy49 { Dummy50 i50; } 92 93 /** 94 * Write and read class descriptors to/from a stream. 95 * Arguments: <# cycles> 96 */ run(String[] args)97 public long run(String[] args) throws Exception { 98 int ncycles = Integer.parseInt(args[0]); 99 StreamBuffer sbuf = new StreamBuffer(); 100 ObjectOutputStream oout = 101 new ObjectOutputStream(sbuf.getOutputStream()); 102 ObjectInputStream oin = 103 new ObjectInputStream(sbuf.getInputStream()); 104 ObjectStreamClass desc = ObjectStreamClass.lookup(Dummy50.class); 105 106 doReps(oout, oin, sbuf, desc, 1); // warmup 107 108 long start = System.currentTimeMillis(); 109 doReps(oout, oin, sbuf, desc, ncycles); 110 return System.currentTimeMillis() - start; 111 } 112 113 /** 114 * Run benchmark for given number of cycles. 115 */ doReps(ObjectOutputStream oout, ObjectInputStream oin, StreamBuffer sbuf, ObjectStreamClass desc, int ncycles)116 void doReps(ObjectOutputStream oout, ObjectInputStream oin, 117 StreamBuffer sbuf, ObjectStreamClass desc, int ncycles) 118 throws Exception 119 { 120 for (int i = 0; i < ncycles; i++) { 121 sbuf.reset(); 122 oout.reset(); 123 oout.writeObject(desc); 124 oout.flush(); 125 oin.readObject(); 126 } 127 } 128 } 129