1 /* 2 * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. 3 * Copyright (c) 2020 SAP SE. All rights reserved. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 * 24 */ 25 26 import java.util.*; 27 28 public class AllocationProfile { 29 30 final String name; 31 32 // Allocation word size spread 33 public final long minimumSingleAllocationSize; 34 public final long maximumSingleAllocationSize; 35 36 // dealloc probability [0.0 .. 1.0] 37 public final double randomDeallocProbability; 38 39 public AllocationProfile(String name, long minimumSingleAllocationSize, long maximumSingleAllocationSize, double randomDeallocProbability) { 40 this.minimumSingleAllocationSize = minimumSingleAllocationSize; 41 this.maximumSingleAllocationSize = maximumSingleAllocationSize; 42 this.randomDeallocProbability = randomDeallocProbability; 43 this.name = name; 44 } 45 46 public long randomAllocationSize() { 47 Random r = new Random(); 48 return r.nextInt((int)(maximumSingleAllocationSize - minimumSingleAllocationSize + 1)) + minimumSingleAllocationSize; 49 } 50 51 52 // Some standard profiles 53 static final List<AllocationProfile> standardProfiles = new ArrayList<>(); 54 55 static { 56 standardProfiles.add(new AllocationProfile("medium-range",1, 2048, 0.15)); 57 standardProfiles.add(new AllocationProfile("small-blocks",1, 512, 0.15)); 58 standardProfiles.add(new AllocationProfile("micro-blocks",1, 32, 0.15)); 59 } 60 61 static AllocationProfile randomProfile() { 62 return standardProfiles.get(RandomHelper.random().nextInt(standardProfiles.size())); 63 } 64 65 @Override 66 public String toString() { 67 return "MetaspaceTestAllocationProfile{" + 68 "name='" + name + '\'' + 69 ", minimumSingleAllocationSize=" + minimumSingleAllocationSize + 70 ", maximumSingleAllocationSize=" + maximumSingleAllocationSize + 71 ", randomDeallocProbability=" + randomDeallocProbability + 72 '}'; 73 } 74 75 }