Path: blob/master/test/hotspot/jtreg/vmTestbase/vm/gc/containers/MapContainer.java
41155 views
/*1* Copyright (c) 2010, 2018, 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 vm.gc.containers;2324import java.util.HashSet;25import java.util.Map;26import java.util.Set;27import nsk.share.gc.gp.GarbageProducer;28import nsk.share.gc.gp.MemoryStrategy;29import nsk.share.test.LocalRandom;3031/*32* The MapContainer select a certain amout of random elements and remove33* them. After this it put the same number of elements with random keys.34*/35class MapContainer extends TypicalContainer {3637Map map;3839public MapContainer(Map map, long maximumSize, GarbageProducer garbageProducer,40MemoryStrategy memoryStrategy, Speed speed) {41super(maximumSize, garbageProducer, memoryStrategy, speed);42this.map = map;43}4445@Override46public void initialize() {47for (int i = 0; i < count; i++) {48if (!stresser.continueExecution()) {49return;50}51map.put(i, garbageProducer.create(size));52}53}5455@Override56public void update() {57Set<Integer> updated = new HashSet();58for (int i = 0; i < count * speed.getValue() / 100; i++) {59updated.add(LocalRandom.nextInt((int) count));60}61for (Integer i : updated) {62if (!stresser.continueExecution()) {63return;64}65Object obj = map.remove(i);66if (obj != null) {67garbageProducer.validate(obj);68}69}70for (Integer i : updated) {71if (!stresser.continueExecution()) {72return;73}74map.put(i, garbageProducer.create(size));75}76}77}787980