# HG changeset patch # User thartmann # Date 1509438827 -3600 # Node ID 08fa85a36a673e1a7ec615704175a1ceb8678ad7 # Parent 9ccaa4e79030299728f1f5b3360091147a5a5093 8190351: InitialAndMaxUsageTest does not free allocated blob Summary: Refactored test to add blob to free list and changed the allocation loop to start with blobs of size ~36 Mb. Reviewed-by: kvn diff -r 9ccaa4e79030 -r 08fa85a36a67 test/hotspot/jtreg/compiler/codecache/jmx/InitialAndMaxUsageTest.java --- a/test/hotspot/jtreg/compiler/codecache/jmx/InitialAndMaxUsageTest.java Mon Oct 30 17:14:39 2017 +0100 +++ b/test/hotspot/jtreg/compiler/codecache/jmx/InitialAndMaxUsageTest.java Tue Oct 31 09:33:47 2017 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,18 +75,12 @@ } } - private void fillWithSize(long size, List blobs, MemoryPoolMXBean bean) { - long blob; - /* Don't fill too much to have space for adapters. So, stop after crossing 95% and - don't allocate in case we'll cross 97% on next allocation. We can hit situation - like 94% -> (1 allocation) -> 100% otherwise. So, check if - is less than 97%, then allocate in case it is, then, stop - further allocations with given size in case more than 95% */ - while (((double) bean.getUsage().getUsed() + size <= (CACHE_USAGE_COEF + 0.02d) * maxSize) - && (blob = CodeCacheUtils.WB.allocateCodeBlob(size, btype.id)) != 0L - && ((double) bean.getUsage().getUsed() <= CACHE_USAGE_COEF * maxSize)) { - blobs.add(blob); - } + private boolean canAllocate(double size, long maxSize, MemoryPoolMXBean bean) { + // Don't fill too much to have space for adapters. So, stop after crossing 95% and + // don't allocate in case we'll cross 97% on next allocation. + double used = bean.getUsage().getUsed(); + return (used <= CACHE_USAGE_COEF * maxSize) && + (used + size <= (CACHE_USAGE_COEF + 0.02d) * maxSize); } protected void runTest() { @@ -106,8 +100,12 @@ lots of small allocations takes too much time, so, just a small optimization */ try { - for (int coef = 1000000; coef > 0; coef /= 10) { - fillWithSize(coef * minAllocationUnit, blobs, bean); + for (long size = 100_000 * minAllocationUnit; size > 0; size /= 10) { + long blob = 0; + while (canAllocate(size, maxSize, bean) && + (blob = CodeCacheUtils.WB.allocateCodeBlob(size, btype.id)) != 0) { + blobs.add(blob); + } } Asserts.assertGT((double) bean.getUsage().getUsed(), CACHE_USAGE_COEF * maxSize, String.format("Unable to fill "