test/hotspot/jtreg/gc/g1/TestGreyReclaimedHumongousObjects.java
author sangheki
Thu, 26 Oct 2017 21:30:48 -0700
changeset 47756 55714c3d544c
parent 47216 71c04702a3d5
child 53523 4c5184c56dc2
permissions -rw-r--r--
8185278: TestGreyReclaimedHumongousObjects.java fails guarantee(index != trim_index(_head_index + 1)) failed: should not go past head Summary: Add STS to avoid MMU concurrency problem between VM Thread and Concurrent Mark Thread Reviewed-by: tschatzl, ehelin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30182
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
     1
/*
47756
55714c3d544c 8185278: TestGreyReclaimedHumongousObjects.java fails guarantee(index != trim_index(_head_index + 1)) failed: should not go past head
sangheki
parents: 47216
diff changeset
     2
 * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
30182
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
     4
 *
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
     7
 * published by the Free Software Foundation.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
     8
 *
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    13
 * accompanied this code).
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    14
 *
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    18
 *
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    21
 * questions.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    22
 */
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    23
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    24
/*
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    25
 * @test TestGreyReclaimedHumongousObjects.java
47756
55714c3d544c 8185278: TestGreyReclaimedHumongousObjects.java fails guarantee(index != trim_index(_head_index + 1)) failed: should not go past head
sangheki
parents: 47216
diff changeset
    26
 * @bug 8069367 8185278
39414
4adf52148100 8160088: update hotspot tests depending on GC to use @requires vm.gc.X
dfazunen
parents: 38083
diff changeset
    27
 * @requires vm.gc.G1
30182
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    28
 * @summary Test handling of marked but unscanned reclaimed humongous objects.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    29
 * @key gc
38083
2ffb46735fec 8154843: GC tests should be correctly marked with @module
mchernov
parents: 30254
diff changeset
    30
 * @modules jdk.management
30182
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    31
 * @run main/othervm -XX:+UseG1GC -Xss32m -Xmx128m -XX:G1HeapRegionSize=1m
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    32
 *      -XX:+UnlockExperimentalVMOptions
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    33
 *          -XX:+G1EagerReclaimHumongousObjects
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    34
 *          -XX:+G1EagerReclaimHumongousObjectsWithStaleRefs
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    35
 *      TestGreyReclaimedHumongousObjects 1048576 90
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    36
 */
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    37
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    38
// This test spawns a bunch of threads, each of them rapidly
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    39
// allocating large objects and storing them into a circular buffer
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    40
// associated with the thread.  The circular buffer results in these
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    41
// objects becoming dead in fairly short order.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    42
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    43
// The situation we're trying to provoke is
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    44
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    45
// (1) A humongous object H is marked and added to the mark stack.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    46
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    47
// (2) An evacuation pause determines H is no longer live, and
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    48
// reclaims it.  This occurs before concurrent marking has gotten
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    49
// around to processing the mark stack entry for H.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    50
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    51
// (3) Concurrent marking processes the mark stack entry for H.  The
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    52
// bug is that it would attempt to scan the now dead object.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    53
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    54
// Unfortunately, this test is *very* sensitive to configuration.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    55
// Among the parameters that affect whether / how often we'll get into
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    56
// the desired situation within a reasonable amount of time are:
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    57
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    58
// - THREAD_COUNT: The number of allocating threads.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    59
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    60
// - OLD_COUNT: The number of objects each thread keeps.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    61
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    62
// - MAX_MEMORY: The maximum heap size.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    63
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    64
// - G1HeapRegionSize
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    65
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    66
// - The size of the objects being allocated.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    67
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    68
// The parameter values specified here:
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    69
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    70
// - THREAD_COUNT = 12
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    71
// - OLD_COUNT == 4
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    72
// - MAX_MEMORY == 128m
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    73
// - G1HeapRegionSize = 1m
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    74
// - Object size = 1048576 (2 regions after header overhead and roundup)
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    75
//
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    76
// seems to work well at provoking the desired state fairly quickly.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    77
// Even relatively small perturbations may change that.  The key
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    78
// factors seem to be keeping the heap mostly full of live objects but
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    79
// having them become dead fairly quickly.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    80
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    81
import java.util.Date;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    82
import java.util.concurrent.ExecutorService;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    83
import java.util.concurrent.Executors;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    84
import java.util.concurrent.ThreadFactory;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    85
import java.util.concurrent.TimeUnit;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    86
import com.sun.management.HotSpotDiagnosticMXBean;
30254
224dcf3ebade 8078144: many nightly tests failed due to NoSuchMethodError: sun.management.ManagementFactoryHelper.getDiagnosticMXBean
sjiang
parents: 30182
diff changeset
    87
import java.lang.management.ManagementFactory;
30182
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    88
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    89
public class TestGreyReclaimedHumongousObjects {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    90
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    91
    static class NamedThreadFactory implements ThreadFactory {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    92
       private int threadNum = 0;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    93
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    94
       @Override
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    95
       public Thread newThread(Runnable r) {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    96
         return new Thread(r, THREAD_NAME + (threadNum++));
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    97
       }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    98
    }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
    99
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   100
    static class Runner extends Thread {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   101
        private final Date startDate = new Date();
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   102
        private final int obj_size;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   103
        private final Object[] old_garbage;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   104
        private int old_index = 0;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   105
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   106
        public Runner(int obj_size) {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   107
            this.obj_size = obj_size;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   108
            old_garbage = new Object[OLD_COUNT];
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   109
        }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   110
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   111
        private void allocate_garbage() {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   112
            byte[] garbage = new byte[obj_size];
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   113
            old_garbage[Math.abs(++old_index % OLD_COUNT)] = garbage;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   114
        }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   115
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   116
        @Override
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   117
        public void run() {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   118
            try {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   119
                while (!isInterrupted()) {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   120
                    allocate_garbage();
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   121
                    Thread.sleep(0); // Yield, to ensure interruptable.
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   122
                }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   123
            } catch (InterruptedException e) {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   124
                System.out.println("Aborted after "
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   125
                                   + (new Date().getTime() - startDate.getTime())
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   126
                                   + " ms");
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   127
                interrupt();
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   128
            }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   129
        }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   130
    }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   131
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   132
    public static void main(String[] args) throws Exception {
30254
224dcf3ebade 8078144: many nightly tests failed due to NoSuchMethodError: sun.management.ManagementFactoryHelper.getDiagnosticMXBean
sjiang
parents: 30182
diff changeset
   133
        HotSpotDiagnosticMXBean diagnostic =
224dcf3ebade 8078144: many nightly tests failed due to NoSuchMethodError: sun.management.ManagementFactoryHelper.getDiagnosticMXBean
sjiang
parents: 30182
diff changeset
   134
                ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
30182
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   135
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   136
        System.out.println("Max memory= " + MAX_MEMORY + " bytes");
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   137
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   138
        int obj_size = 0;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   139
        long seconds_to_run = 0;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   140
        if (args.length != 2) {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   141
            throw new RuntimeException("Object size argument must be supplied");
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   142
        } else {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   143
            obj_size = Integer.parseInt(args[0]);
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   144
            seconds_to_run = Integer.parseInt(args[1]);
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   145
        }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   146
        System.out.println("Objects size= " + obj_size + " bytes");
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   147
        System.out.println("Seconds to run=" + seconds_to_run);
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   148
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   149
        int region_size =
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   150
            Integer.parseInt(diagnostic.getVMOption("G1HeapRegionSize").getValue());
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   151
        if (obj_size < (region_size / 2)) {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   152
            throw new RuntimeException("Object size " + obj_size +
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   153
                                       " is not humongous with region size " + region_size);
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   154
        }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   155
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   156
        ExecutorService executor =
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   157
            Executors.newFixedThreadPool(THREAD_COUNT, new NamedThreadFactory());
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   158
        System.out.println("Starting " + THREAD_COUNT + " threads");
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   159
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   160
        for (int i = 0; i < THREAD_COUNT; i++) {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   161
            executor.execute(new Runner(obj_size));
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   162
        }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   163
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   164
        Thread.sleep(seconds_to_run * 1000);
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   165
        executor.shutdownNow();
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   166
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   167
        if (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   168
            System.err.println("Thread pool did not terminate after 10 seconds after shutdown");
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   169
        }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   170
    }
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   171
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   172
    private static final long MAX_MEMORY = Runtime.getRuntime().maxMemory();
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   173
    private static final int OLD_COUNT = 4;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   174
    private static final int THREAD_COUNT = 12;
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   175
    private static final String THREAD_NAME = "TestGreyRH-";
1c980a880941 8069367: Eagerly reclaimed humongous objects left on mark stack
kbarrett
parents:
diff changeset
   176
}