1 /* 2 * Copyright (c) 2007, 2018, 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 package nsk.share.gc.gp; 25 26 import java.util.List; 27 import java.util.ArrayList; 28 29 import nsk.share.gc.Memory; 30 import nsk.share.gc.gp.array.*; 31 import nsk.share.gc.gp.string.*; 32 import nsk.share.test.LocalRandom; 33 34 /** 35 * Factory for garbage producers 36 */ 37 public class GarbageProducers { 38 private List<GarbageProducer> primitiveArrayProducers; 39 private List<GarbageProducer> valueArrayProducers; 40 private List<GarbageProducer> arrayProducers; 41 private List<GarbageProducer<String>> stringProducers; 42 private List<GarbageProducer> allProducers; 43 44 /** 45 * Get all primitive array producers. 46 */ 47 public List<GarbageProducer> getPrimitiveArrayProducers() { 48 if (primitiveArrayProducers == null) { 49 primitiveArrayProducers = new ArrayList<GarbageProducer>(); 50 primitiveArrayProducers.add(new ByteArrayProducer()); 51 primitiveArrayProducers.add(new BooleanArrayProducer()); 52 primitiveArrayProducers.add(new ShortArrayProducer()); 53 primitiveArrayProducers.add(new CharArrayProducer()); 54 primitiveArrayProducers.add(new IntArrayProducer()); 55 primitiveArrayProducers.add(new LongArrayProducer()); 56 primitiveArrayProducers.add(new FloatArrayProducer()); 57 primitiveArrayProducers.add(new DoubleArrayProducer()); 58 } 59 return primitiveArrayProducers; 60 } 61 62 /** 63 * Get all primitive array producers. 64 */ 65 public List<GarbageProducer> getValueArrayProducers() { 66 if (valueArrayProducers == null) { 67 valueArrayProducers = new ArrayList<GarbageProducer>(); 68 valueArrayProducers.add(new ByteObjArrayProducer()); 69 valueArrayProducers.add(new BooleanObjArrayProducer()); 70 valueArrayProducers.add(new IntegerObjArrayProducer()); 71 } 72 return primitiveArrayProducers; 73 } 74 /** 75 * Get all array producers. 76 */ 77 public List<GarbageProducer> getArrayProducers() { 78 if (arrayProducers == null) { 79 arrayProducers = new ArrayList<GarbageProducer>(); 80 arrayProducers.addAll(getPrimitiveArrayProducers()); 81 arrayProducers.add(new ObjectArrayProducer()); 82 if (Memory.isValhallaEnabled()) { 83 arrayProducers.addAll(getValueArrayProducers()); 84 } 85 } 86 return arrayProducers; 87 } 88 89 /** 90 * Get all string producers. 91 */ 92 public List<GarbageProducer<String>> getStringProducers() { 93 if (stringProducers == null) { 94 stringProducers = new ArrayList<GarbageProducer<String>>(); 95 stringProducers.add(new RandomStringProducer()); 96 stringProducers.add(new InternedStringProducer()); 97 } 98 return stringProducers; 99 } 100 101 public List<GarbageProducer> getAllProducers() { 102 if (allProducers == null) { 103 allProducers = new ArrayList<GarbageProducer>(); 104 allProducers.addAll(getArrayProducers()); 105 allProducers.addAll(getStringProducers()); 106 } 107 return allProducers; 108 } 109 } 110 111 class IntegerObjArrayProducer implements GarbageProducer<Integer[]> { 112 public Integer[] create(long memory) { 113 int size = Memory.getIntegerArrayElementSize(); 114 if (!Memory.isValhallaEnabled()) { 115 // Let assume that every Integer is new object 116 size += Memory.getObjectExtraSize(); 117 } 118 Integer[] arr = new Integer[Memory.getArrayLength(memory, size)]; 119 LocalRandom.nextInts(arr); 120 return arr; 121 } 122 123 public void validate(Integer[] arr) { 124 LocalRandom.validate(arr); 125 } 126 } 127 128 129 class ByteObjArrayProducer implements GarbageProducer<Byte[]> { 130 public Byte[] create(long memory) { 131 Byte[] arr = new Byte[Memory.getArrayLength(memory, Memory.getByteArrayElementSize())]; 132 LocalRandom.nextBytes(arr); 133 return arr; 134 } 135 136 public void validate(Byte[] arr) { 137 LocalRandom.validate(arr); 138 } 139 } 140 141 class BooleanObjArrayProducer implements GarbageProducer<Boolean[]> { 142 public Boolean[] create(long memory) { 143 Boolean[] arr = new Boolean[Memory.getArrayLength(memory, Memory.getBooleanArrayElementSize())]; 144 LocalRandom.nextBooleans(arr); 145 return arr; 146 } 147 148 public void validate(Boolean[] arr) { 149 LocalRandom.validate(arr); 150 } 151 } --- EOF ---