src/share/vm/utilities/dtrace.hpp

Thu, 20 Nov 2008 16:56:09 -0800

author
ysr
date
Thu, 20 Nov 2008 16:56:09 -0800
changeset 888
c96030fff130
parent 435
a61af66fc99e
child 1902
fb1a39993f69
permissions
-rw-r--r--

6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa

duke@435 1 /*
duke@435 2 * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
duke@435 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@435 20 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@435 21 * have any questions.
duke@435 22 *
duke@435 23 */
duke@435 24
duke@435 25 #if defined(SOLARIS) && defined(DTRACE_ENABLED)
duke@435 26
duke@435 27 #include <sys/sdt.h>
duke@435 28
duke@435 29 #define DTRACE_ONLY(x) x
duke@435 30 #define NOT_DTRACE(x)
duke@435 31
duke@435 32 #else // ndef SOLARIS || ndef DTRACE_ENABLED
duke@435 33
duke@435 34 #define DTRACE_ONLY(x)
duke@435 35 #define NOT_DTRACE(x) x
duke@435 36
duke@435 37 #define DTRACE_PROBE(a,b) {;}
duke@435 38 #define DTRACE_PROBE1(a,b,c) {;}
duke@435 39 #define DTRACE_PROBE2(a,b,c,d) {;}
duke@435 40 #define DTRACE_PROBE3(a,b,c,d,e) {;}
duke@435 41 #define DTRACE_PROBE4(a,b,c,d,e,f) {;}
duke@435 42 #define DTRACE_PROBE5(a,b,c,d,e,f,g) {;}
duke@435 43
duke@435 44 #endif
duke@435 45
duke@435 46 #define HS_DTRACE_PROBE_FN(provider,name)\
duke@435 47 __dtrace_##provider##___##name
duke@435 48
duke@435 49 #define HS_DTRACE_PROBE_DECL_N(provider,name,args) \
duke@435 50 DTRACE_ONLY(extern "C" void HS_DTRACE_PROBE_FN(provider,name) args)
duke@435 51 #define HS_DTRACE_PROBE_CDECL_N(provider,name,args) \
duke@435 52 DTRACE_ONLY(extern void HS_DTRACE_PROBE_FN(provider,name) args)
duke@435 53
duke@435 54 /* Dtrace probe declarations */
duke@435 55 #define HS_DTRACE_PROBE_DECL(provider,name) \
duke@435 56 HS_DTRACE_PROBE_DECL0(provider,name)
duke@435 57 #define HS_DTRACE_PROBE_DECL0(provider,name)\
duke@435 58 HS_DTRACE_PROBE_DECL_N(provider,name,(void))
duke@435 59 #define HS_DTRACE_PROBE_DECL1(provider,name,t0)\
duke@435 60 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t))
duke@435 61 #define HS_DTRACE_PROBE_DECL2(provider,name,t0,t1)\
duke@435 62 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t))
duke@435 63 #define HS_DTRACE_PROBE_DECL3(provider,name,t0,t1,t2)\
duke@435 64 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t))
duke@435 65 #define HS_DTRACE_PROBE_DECL4(provider,name,t0,t1,t2,t3)\
duke@435 66 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t,\
duke@435 67 uintptr_t))
duke@435 68 #define HS_DTRACE_PROBE_DECL5(provider,name,t0,t1,t2,t3,t4)\
duke@435 69 HS_DTRACE_PROBE_DECL_N(provider,name,(\
duke@435 70 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))
duke@435 71 #define HS_DTRACE_PROBE_DECL6(provider,name,t0,t1,t2,t3,t4,t5)\
duke@435 72 HS_DTRACE_PROBE_DECL_N(provider,name,(\
duke@435 73 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))
duke@435 74 #define HS_DTRACE_PROBE_DECL7(provider,name,t0,t1,t2,t3,t4,t5,t6)\
duke@435 75 HS_DTRACE_PROBE_DECL_N(provider,name,(\
duke@435 76 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))
duke@435 77 #define HS_DTRACE_PROBE_DECL8(provider,name,t0,t1,t2,t3,t4,t5,t6,t7)\
duke@435 78 HS_DTRACE_PROBE_DECL_N(provider,name,(\
duke@435 79 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\
duke@435 80 uintptr_t))
duke@435 81 #define HS_DTRACE_PROBE_DECL9(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8)\
duke@435 82 HS_DTRACE_PROBE_DECL_N(provider,name,(\
duke@435 83 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\
duke@435 84 uintptr_t,uintptr_t))
duke@435 85 #define HS_DTRACE_PROBE_DECL10(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9)\
duke@435 86 HS_DTRACE_PROBE_DECL_N(provider,name,(\
duke@435 87 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\
duke@435 88 uintptr_t,uintptr_t,uintptr_t))
duke@435 89
duke@435 90 /* Dtrace probe definitions */
duke@435 91 #define HS_DTRACE_PROBE_N(provider,name, args) \
duke@435 92 DTRACE_ONLY(HS_DTRACE_PROBE_FN(provider,name) args)
duke@435 93
duke@435 94 #define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name)
duke@435 95 #define HS_DTRACE_PROBE0(provider,name)\
duke@435 96 HS_DTRACE_PROBE_N(provider,name,())
duke@435 97 #define HS_DTRACE_PROBE1(provider,name,a0)\
duke@435 98 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0))
duke@435 99 #define HS_DTRACE_PROBE2(provider,name,a0,a1)\
duke@435 100 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1))
duke@435 101 #define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\
duke@435 102 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2))
duke@435 103 #define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\
duke@435 104 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
duke@435 105 (uintptr_t)a3))
duke@435 106 #define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\
duke@435 107 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
duke@435 108 (uintptr_t)a3,(uintptr_t)a4))
duke@435 109 #define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\
duke@435 110 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
duke@435 111 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5))
duke@435 112 #define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\
duke@435 113 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
duke@435 114 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6))
duke@435 115 #define HS_DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)\
duke@435 116 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
duke@435 117 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7))
duke@435 118 #define HS_DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\
duke@435 119 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
duke@435 120 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\
duke@435 121 (uintptr_t)a8))
duke@435 122 #define HS_DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)\
duke@435 123 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
duke@435 124 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\
duke@435 125 (uintptr_t)a8,(uintptr_t)a9))

mercurial