test/hotspot/jtreg/vmTestbase/gc/gctests/gctest02/gctest02.java
author jlahoda
Tue, 12 Nov 2019 06:32:13 +0000
changeset 59021 cfc7bb9a5a92
parent 50168 2f59dc95847d
permissions -rw-r--r--
8232684: Make switch expressions final Reviewed-by: alanb, mcimadamore, kvn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50168
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
     1
/*
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
     2
 * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
     4
 *
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
     7
 * published by the Free Software Foundation.
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
     8
 *
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    13
 * accompanied this code).
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    14
 *
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    18
 *
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    21
 * questions.
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    22
 */
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    23
//gctest02.java
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    24
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    25
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    26
/*
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    27
 * @test
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    28
 * @key gc
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    29
 *
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    30
 * @summary converted from VM Testbase gc/gctests/gctest02.
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    31
 * VM Testbase keywords: [gc]
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    32
 *
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    33
 * @library /vmTestbase
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    34
 *          /test/lib
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    35
 * @run driver jdk.test.lib.FileInstaller . .
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    36
 * @run main/othervm gc.gctests.gctest02.gctest02 100
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    37
 */
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    38
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    39
package gc.gctests.gctest02;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    40
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    41
import nsk.share.TestFailure;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    42
import nsk.share.TestBug;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    43
/*  stress testing
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    44
 create 16 memory evil threads requesting to allocate
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    45
 the object of sizes from 8 to ( 2 ^ 19).
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    46
 The live time of objects is random (0 ~ 1000).
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    47
 Here we let the threads that reference the objects
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    48
 to simulate the object life time.
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    49
*/
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    50
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    51
import java.util.Random;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    52
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    53
class PopulationException extends Exception {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    54
    //this exception is used to signal that we've
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    55
    //reached the end of the test
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    56
}
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    57
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    58
//the LocalRandom class is used to isolate the pseudo-random
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    59
//number generator from other parts of the system which might
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    60
//silently be using it.
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    61
//This is to make sure the tests are repeatable
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    62
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    63
class LocalRandom {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    64
    public static Random rGen = null;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    65
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    66
    public static double random() {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    67
        //should fail if rGen is not initialized
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    68
        return rGen.nextDouble();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    69
    }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    70
}
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    71
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    72
class ThreadCount {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    73
    static int count= 0;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    74
    static synchronized void inc() { count++; }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    75
    static synchronized void dec() { count --; }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    76
    static synchronized int get() { return count; }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    77
}
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    78
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    79
class Person {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    80
        String name;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    81
        int     ssid;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    82
        int     age;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    83
        int     buf[];
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    84
        int     bufsz;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    85
        static int populationCount = 0;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    86
        static int populationLimit = 0;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    87
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    88
        Person(String n, int ssid, int age, int bufsz)
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    89
        throws PopulationException {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    90
                name = n;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    91
                this.ssid = ssid;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    92
                this.age = age;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    93
                if ( bufsz > 0 ) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    94
                        this.bufsz = bufsz;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    95
                        this.buf = new int[bufsz];
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    96
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    97
                incPopulation();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    98
                if (getPopulation() > getPopulationLimit()) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
    99
                        throw new PopulationException();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   100
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   101
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   102
        public static synchronized int getPopulationLimit() {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   103
                return populationLimit;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   104
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   105
        public static synchronized void setPopulationLimit(int newLimit) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   106
                populationLimit = newLimit;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   107
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   108
        public static synchronized int getPopulation() {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   109
                return populationCount;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   110
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   111
        public static synchronized void incPopulation() {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   112
                populationCount ++;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   113
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   114
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   115
}
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   116
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   117
// hr (humane resource) dept is using objects.
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   118
// Put the hr thread to sleep to keep the reference to objects
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   119
class hr extends Thread {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   120
        Person pp;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   121
        int lifetime;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   122
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   123
        hr(Person p, int l) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   124
                pp = p;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   125
                lifetime = l;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   126
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   127
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   128
        public void run() {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   129
                // just sleep to emulate the life time of object referenced by p
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   130
                try { sleep(lifetime); }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   131
                catch (InterruptedException e) {}
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   132
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   133
}
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   134
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   135
class Memevil extends Thread {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   136
        int sum;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   137
        int bufsz = 64;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   138
        boolean debug = false;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   139
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   140
        Memevil(int bufsz) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   141
                sum = 0;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   142
                this.bufsz = bufsz;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   143
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   144
        /*      Person object is live short, it will be garbage after
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   145
         *      control returns
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   146
         */
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   147
        private boolean doit() {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   148
                try {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   149
                        Person p = new Person("Duke", 100, 100, bufsz);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   150
                        hr useit = new hr(p, (int)(100*LocalRandom.random()));
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   151
                        useit.start();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   152
                        return true;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   153
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   154
                catch (PopulationException e) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   155
                        return false;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   156
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   157
                catch (OutOfMemoryError e ) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   158
                        System.err.println(getName() + ": Out of Memory");
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   159
                        return false;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   160
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   161
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   162
        public void run() {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   163
                while ( doit() ) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   164
                        if ( LocalRandom.random() > 0.6668) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   165
                                try {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   166
                                        sleep(10);   // to be nice
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   167
                                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   168
                                catch (InterruptedException e) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   169
                                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   170
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   171
                        Thread.yield();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   172
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   173
                //we've reached the population limit, so we're exiting the thread
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   174
                ThreadCount.dec();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   175
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   176
}
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   177
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   178
class Escaper extends Thread {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   179
        public void run() {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   180
                while ( ThreadCount.get() > 0 ) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   181
                        int buf[] = new int[32];
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   182
                        {
59021
cfc7bb9a5a92 8232684: Make switch expressions final
jlahoda
parents: 50168
diff changeset
   183
                                                Thread.yield();
50168
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   184
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   185
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   186
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   187
}
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   188
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   189
public class gctest02 {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   190
        public static void main(String args[] ) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   191
                int bufsz = 8;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   192
                int peopleLimit = 1000;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   193
                long randomSeed = System.currentTimeMillis();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   194
                Memevil me=null;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   195
                if (args.length > 0)
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   196
                {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   197
                        try
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   198
                        {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   199
                                peopleLimit = new Integer(args[0]).intValue();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   200
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   201
                        catch (NumberFormatException e)
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   202
                        {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   203
                                throw new TestBug(
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   204
                                        "Bad input to gctest02. Expected integer, got: ->"
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   205
                                        + args[0] + "<-", e);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   206
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   207
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   208
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   209
                if (args.length == 2)
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   210
                {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   211
                        try
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   212
                        {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   213
                                randomSeed = new Long(args[1]).longValue();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   214
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   215
                        catch (NumberFormatException e)
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   216
                        {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   217
                                throw new TestBug(
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   218
                                        "Bad input to gctest02. Expected long, got: ->"
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   219
                                        + args[0] + "<-", e);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   220
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   221
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   222
                Person.setPopulationLimit(peopleLimit);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   223
                System.out.println("Seed value: " + randomSeed);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   224
                for (int ii=0; ii<40; ii++) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   225
                        bufsz = 8;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   226
                        LocalRandom.rGen = new Random(randomSeed);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   227
                        Person.populationCount = 0;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   228
                        Escaper you = new Escaper();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   229
                        you.setName("Escaper");
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   230
                        ThreadCount.inc();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   231
                        you.start();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   232
                        me = new Memevil(bufsz);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   233
                        me.setName("Memevil" + bufsz);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   234
                        bufsz = 2*bufsz;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   235
                        me.start();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   236
                        Thread.yield();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   237
                        for (int i=1; i<11; i++) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   238
                                ThreadCount.inc();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   239
                                me = new Memevil(bufsz);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   240
                                me.setName("Memevil" + bufsz);
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   241
                                bufsz = 2*bufsz;
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   242
                                me.start();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   243
                                Thread.yield();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   244
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   245
                        try {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   246
                                you.join();
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   247
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   248
                        catch (InterruptedException e) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   249
                                throw new TestFailure("InterruptedException in gctest2.main()");
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   250
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   251
                        for (int i=1; i<11; i++) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   252
                                try { me.join(); }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   253
                                catch (InterruptedException e) {
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   254
                                        throw new TestFailure("InterruptedException in gctest2.main()");
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   255
                                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   256
                        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   257
                }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   258
                System.out.println("Test passed.");
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   259
        }
2f59dc95847d 8199370: [TESTBUG] Open source vm testbase GC tests
iignatyev
parents:
diff changeset
   260
}