annotate src/share/vm/prims/jvmtiRawMonitor.hpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents 8b46b0196eb0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1878
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
1 /*
7951
8b46b0196eb0 8000692: Remove old KERNEL code
zgu
parents: 1972
diff changeset
2 * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
1878
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
4 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
7 * published by the Free Software Foundation.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
8 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
13 * accompanied this code).
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
14 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
18 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
21 * questions.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
22 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
23 */
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
25 #ifndef SHARE_VM_PRIMS_JVMTIRAWMONITOR_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
26 #define SHARE_VM_PRIMS_JVMTIRAWMONITOR_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
28 #include "runtime/objectMonitor.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
29 #include "utilities/growableArray.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
30
1878
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
31 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
32 // class JvmtiRawMonitor
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
33 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
34 // Used by JVMTI methods: All RawMonitor methods (CreateRawMonitor, EnterRawMonitor, etc.)
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
35 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
36 // Wrapper for ObjectMonitor class that saves the Monitor's name
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
37 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
38
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
39 class JvmtiRawMonitor : public ObjectMonitor {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
40 private:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
41 int _magic;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
42 char * _name;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
43 // JVMTI_RM_MAGIC is set in contructor and unset in destructor.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
44 enum { JVMTI_RM_MAGIC = (int)(('T' << 24) | ('I' << 16) | ('R' << 8) | 'M') };
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
45
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
46 int SimpleEnter (Thread * Self) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
47 int SimpleExit (Thread * Self) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
48 int SimpleWait (Thread * Self, jlong millis) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
49 int SimpleNotify (Thread * Self, bool All) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
50
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
51 public:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
52 JvmtiRawMonitor(const char *name);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
53 ~JvmtiRawMonitor();
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
54 int raw_enter(TRAPS);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
55 int raw_exit(TRAPS);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
56 int raw_wait(jlong millis, bool interruptable, TRAPS);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
57 int raw_notify(TRAPS);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
58 int raw_notifyAll(TRAPS);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
59 int magic() { return _magic; }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
60 const char *get_name() { return _name; }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
61 bool is_valid();
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
62 };
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
63
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
64 // Onload pending raw monitors
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
65 // Class is used to cache onload or onstart monitor enter
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
66 // which will transition into real monitor when
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
67 // VM is fully initialized.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
68 class JvmtiPendingMonitors : public AllStatic {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
69
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
70 private:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
71 static GrowableArray<JvmtiRawMonitor*> *_monitors; // Cache raw monitor enter
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
72
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
73 inline static GrowableArray<JvmtiRawMonitor*>* monitors() { return _monitors; }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
74
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
75 static void dispose() {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
76 delete monitors();
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
77 }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
78
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
79 public:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
80 static void enter(JvmtiRawMonitor *monitor) {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
81 monitors()->append(monitor);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
82 }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
83
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
84 static int count() {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
85 return monitors()->length();
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
86 }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
87
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
88 static void destroy(JvmtiRawMonitor *monitor) {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
89 while (monitors()->contains(monitor)) {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
90 monitors()->remove(monitor);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
91 }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
92 }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
93
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
94 // Return false if monitor is not found in the list.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
95 static bool exit(JvmtiRawMonitor *monitor) {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
96 if (monitors()->contains(monitor)) {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
97 monitors()->remove(monitor);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
98 return true;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
99 } else {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
100 return false;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
101 }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
102 }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
103
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
104 static void transition_raw_monitors();
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
105 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
106
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
107 #endif // SHARE_VM_PRIMS_JVMTIRAWMONITOR_HPP