Path: blob/master/test/hotspot/jtreg/compiler/codecache/jmx/UsageThresholdNotExceededTest.java
41153 views
/*1* Copyright (c) 2014, 2021, 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*/2223/*24* @test UsageThresholdNotExceededTest25* @summary verifying that usage threshold not exceeded while allocating less26* than usage threshold27* @library /test/lib /28* @modules java.base/jdk.internal.misc29* java.management30*31* @build sun.hotspot.WhiteBox32* @run driver jdk.test.lib.helpers.ClassFileInstaller sun.hotspot.WhiteBox33* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions34* -XX:+WhiteBoxAPI -XX:-UseCodeCacheFlushing -XX:-MethodFlushing35* -XX:CompileCommand=compileonly,null::*36* -XX:+SegmentedCodeCache37* compiler.codecache.jmx.UsageThresholdNotExceededTest38* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions39* -XX:+WhiteBoxAPI -XX:-UseCodeCacheFlushing -XX:-MethodFlushing40* -XX:CompileCommand=compileonly,null::*41* -XX:-SegmentedCodeCache42* compiler.codecache.jmx.UsageThresholdNotExceededTest43*/4445package compiler.codecache.jmx;4647import sun.hotspot.code.BlobType;4849import java.lang.management.MemoryPoolMXBean;5051public class UsageThresholdNotExceededTest {5253private final BlobType btype;5455public UsageThresholdNotExceededTest(BlobType btype) {56this.btype = btype;57}5859public static void main(String[] args) {60for (BlobType btype : BlobType.getAvailable()) {61new UsageThresholdNotExceededTest(btype).runTest();62}63}6465protected void runTest() {66MemoryPoolMXBean bean = btype.getMemoryPool();67long initialThresholdCount = bean.getUsageThresholdCount();68long initialUsage = bean.getUsage().getUsed();6970bean.setUsageThreshold(initialUsage + 1 + CodeCacheUtils.MIN_ALLOCATION);71long size = CodeCacheUtils.getHeaderSize(btype);7273CodeCacheUtils.WB.allocateCodeBlob(Math.max(0, CodeCacheUtils.MIN_ALLOCATION74- size), btype.id);75// a gc cycle triggers usage threshold recalculation76CodeCacheUtils.WB.fullGC();77CodeCacheUtils.assertEQorGTE(btype, bean.getUsageThresholdCount(), initialThresholdCount,78String.format("Usage threshold was hit: %d times for %s. "79+ "Threshold value: %d with current usage: %d",80bean.getUsageThresholdCount(), bean.getName(),81bean.getUsageThreshold(), bean.getUsage().getUsed()));82System.out.println("INFO: Case finished successfully for " + bean.getName());83}84}858687