annotate test/runtime/Metaspace/FragmentMetaspace.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 * @build GeneratedClassLoader
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
28 * @run main/othervm/timeout=200 FragmentMetaspace
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
29 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
30
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
31 import java.io.IOException;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
32
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
33 /**
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
34 * Test that tries to fragment the native memory used by class loaders.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
35 * This test creates class loaders that load classes of increasing size for every
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
36 * iteration. By increasing the size of the class meta data needed for every iteration
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
37 * we stress the subsystem for allocating native memory for meta data.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
38 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
39 public class FragmentMetaspace {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
40
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
41 public static void main(String... args) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
42 runGrowing(Long.valueOf(System.getProperty("time", "80000")));
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
43 // try to clean up and unload classes to decrease
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
44 // class verification time in debug vm
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
45 System.gc();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
46 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
47
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
48 private static void runGrowing(long time) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
49 long startTime = System.currentTimeMillis();
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 try {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
52 GeneratedClassLoader gcl = new GeneratedClassLoader();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
53
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
54 Class<?> c = gcl.getGeneratedClasses(i, 100)[0];
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
55 c.newInstance();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
56 c = null;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
57
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
58 gcl = null;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
59 } catch (IOException|InstantiationException|IllegalAccessException ex) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
60 throw new RuntimeException(ex);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
61 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
62 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
63 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
64 }