annotate test/runtime/Metaspace/FragmentMetaspaceSimple.java @ 12986:1b422ef5288a

8025728: Missing volatile specifier for field G1AllocRegion::_alloc_region Summary: The field G1AllocRegion::_alloc_region needs to be declared volatile as it is used with that intention. Otherwise the compiler may generate the code that reloads the value which might have changed in the meantime, leading to spurious crashes. Reviewed-by: iveresov, simonis, tschatzl Contributed-by: Axel Siebenborn <axel.siebenborn@sap.com>
author tschatzl
date Wed, 23 Oct 2013 10:23:06 +0200
parents 699d9df07e59
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10344
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
1 /*
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
4 *
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
7 * published by the Free Software Foundation.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
8 *
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
13 * accompanied this code).
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
14 *
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
18 *
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
21 * questions.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
22 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
23
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
24 /**
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
25 * @test
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
26 * @library /runtime/testlibrary
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
27 * @library classes
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
28 * @build test.Empty ClassUnloadCommon
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
29 * @run main/othervm/timeout=200 FragmentMetaspaceSimple
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
30 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
31
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
32 import java.util.ArrayList;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
33
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
34 /**
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
35 * Test that tries to fragment the native memory used by class loaders.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
36 * Keeps every other class loader alive in order to fragment the memory space
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
37 * used to store classes and meta data. Since the memory is probably allocated in
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
38 * chunks per class loader this will cause a lot of fragmentation if not handled
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
39 * properly since every other chunk will be unused.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
40 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
41 public class FragmentMetaspaceSimple {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
42 public static void main(String... args) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
43 runSimple(Long.valueOf(System.getProperty("time", "80000")));
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
44 System.gc();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
45 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
46
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
47 private static void runSimple(long time) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
48 long startTime = System.currentTimeMillis();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
49 ArrayList<ClassLoader> cls = new ArrayList<>();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
50 for (int i = 0; System.currentTimeMillis() < startTime + time; ++i) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
51 ClassLoader ldr = ClassUnloadCommon.newClassLoader();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
52 if (i % 1000 == 0) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
53 cls.clear();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
54 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
55 // only keep every other class loader alive
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
56 if (i % 2 == 1) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
57 cls.add(ldr);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
58 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
59 Class<?> c = null;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
60 try {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
61 c = ldr.loadClass("test.Empty");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
62 } catch (ClassNotFoundException ex) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
63 throw new RuntimeException(ex);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
64 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
65 c = null;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
66 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
67 cls = null;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
68 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
69 }