annotate src/os_cpu/bsd_x86/vm/thread_bsd_x86.cpp @ 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 f2110083203d
children 774e1c2f8741
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
1 /*
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 7180
diff changeset
2 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
4 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
7 * published by the Free Software Foundation.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
8 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
13 * accompanied this code).
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
14 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
18 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
21 * questions.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
22 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
23 */
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
24
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
25 #include "precompiled.hpp"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
26 #include "runtime/frame.inline.hpp"
7180
f34d701e952e 8003935: Simplify the needed includes for using Thread::current()
stefank
parents: 3960
diff changeset
27 #include "runtime/thread.inline.hpp"
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
28
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
29 // For Forte Analyzer AsyncGetCallTrace profiling support - thread is
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
30 // currently interrupted by SIGPROF
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
31 bool JavaThread::pd_get_top_frame_for_signal_handler(frame* fr_addr,
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
32 void* ucontext, bool isInJava) {
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 7180
diff changeset
33 assert(Thread::current() == this, "caller must be current thread");
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 7180
diff changeset
34 return pd_get_top_frame(fr_addr, ucontext, isInJava);
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 7180
diff changeset
35 }
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
36
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 7180
diff changeset
37 bool JavaThread::pd_get_top_frame_for_profiling(frame* fr_addr, void* ucontext, bool isInJava) {
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 7180
diff changeset
38 return pd_get_top_frame(fr_addr, ucontext, isInJava);
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 7180
diff changeset
39 }
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 7180
diff changeset
40
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 7180
diff changeset
41 bool JavaThread::pd_get_top_frame(frame* fr_addr, void* ucontext, bool isInJava) {
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
42 assert(this->is_Java_thread(), "must be JavaThread");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
43 JavaThread* jt = (JavaThread *)this;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
44
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
45 // If we have a last_Java_frame, then we should use it even if
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
46 // isInJava == true. It should be more reliable than ucontext info.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
47 if (jt->has_last_Java_frame()) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
48 *fr_addr = jt->pd_last_frame();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
49 return true;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
50 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
51
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
52 // At this point, we don't have a last_Java_frame, so
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
53 // we try to glean some information out of the ucontext
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
54 // if we were running Java code when SIGPROF came in.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
55 if (isInJava) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
56 ucontext_t* uc = (ucontext_t*) ucontext;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
57
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
58 intptr_t* ret_fp;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
59 intptr_t* ret_sp;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
60 ExtendedPC addr = os::Bsd::fetch_frame_from_ucontext(this, uc,
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
61 &ret_sp, &ret_fp);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
62 if (addr.pc() == NULL || ret_sp == NULL ) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
63 // ucontext wasn't useful
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
64 return false;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
65 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
66
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
67 frame ret_frame(ret_sp, ret_fp, addr.pc());
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
68 if (!ret_frame.safe_for_sender(jt)) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
69 #ifdef COMPILER2
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
70 // C2 uses ebp as a general register see if NULL fp helps
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
71 frame ret_frame2(ret_sp, NULL, addr.pc());
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
72 if (!ret_frame2.safe_for_sender(jt)) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
73 // nothing else to try if the frame isn't good
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
74 return false;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
75 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
76 ret_frame = ret_frame2;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
77 #else
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
78 // nothing else to try if the frame isn't good
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
79 return false;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
80 #endif /* COMPILER2 */
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
81 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
82 *fr_addr = ret_frame;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
83 return true;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
84 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
85
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
86 // nothing else to try
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
87 return false;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
88 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
89
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
90 void JavaThread::cache_global_variables() { }