1 /* 2 * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 package org.graalvm.compiler.debug; 24 25 import static java.lang.Thread.currentThread; 26 27 import java.lang.management.ManagementFactory; 28 import java.lang.management.ThreadInfo; 29 import java.lang.management.ThreadMXBean; 30 31 import javax.management.ObjectName; 32 33 public class Management { 34 35 private static final com.sun.management.ThreadMXBean threadMXBean = Management.initThreadMXBean(); 36 37 /** 38 * The amount of memory allocated by 39 * {@link com.sun.management.ThreadMXBean#getThreadAllocatedBytes(long)} itself. 40 */ 41 private static final long threadMXBeanOverhead = -getCurrentThreadAllocatedBytes() + getCurrentThreadAllocatedBytes(); 42 43 public static long getCurrentThreadAllocatedBytes() { 44 return threadMXBean.getThreadAllocatedBytes(currentThread().getId()) - threadMXBeanOverhead; 45 } 46 47 private static com.sun.management.ThreadMXBean initThreadMXBean() { 48 try { 49 return (com.sun.management.ThreadMXBean) ManagementFactory.getThreadMXBean(); 50 } catch (Error err) { 51 return new UnimplementedBean(); 52 } 53 } 54 55 public static ThreadMXBean getThreadMXBean() { 56 return threadMXBean; 57 } 58 59 private static class UnimplementedBean implements ThreadMXBean, com.sun.management.ThreadMXBean { 60 61 @Override 62 public ObjectName getObjectName() { 63 return null; 64 } 65 66 @Override 67 public long getThreadAllocatedBytes(long arg0) { 68 return 0; 69 } 70 71 @Override 72 public long[] getThreadAllocatedBytes(long[] arg0) { 73 return null; 74 } 75 76 @Override 77 public long[] getThreadCpuTime(long[] arg0) { 78 return null; 79 } 80 81 @Override 82 public long[] getThreadUserTime(long[] arg0) { 83 return null; 84 } 85 86 @Override 87 public boolean isThreadAllocatedMemoryEnabled() { 88 return false; 89 } 90 91 @Override 92 public boolean isThreadAllocatedMemorySupported() { 93 return false; 94 } 95 96 @Override 97 public void setThreadAllocatedMemoryEnabled(boolean arg0) { 98 } 99 100 @Override 101 public int getThreadCount() { 102 return 0; 103 } 104 105 @Override 106 public int getPeakThreadCount() { 107 return 0; 108 } 109 110 @Override 111 public long getTotalStartedThreadCount() { 112 return 0; 113 } 114 115 @Override 116 public int getDaemonThreadCount() { 117 return 0; 118 } 119 120 @Override 121 public long[] getAllThreadIds() { 122 return null; 123 } 124 125 @Override 126 public ThreadInfo getThreadInfo(long id) { 127 return null; 128 } 129 130 @Override 131 public ThreadInfo[] getThreadInfo(long[] ids) { 132 return null; 133 } 134 135 @Override 136 public ThreadInfo getThreadInfo(long id, int maxDepth) { 137 return null; 138 } 139 140 @Override 141 public ThreadInfo[] getThreadInfo(long[] ids, int maxDepth) { 142 return null; 143 } 144 145 @Override 146 public boolean isThreadContentionMonitoringSupported() { 147 return false; 148 } 149 150 @Override 151 public boolean isThreadContentionMonitoringEnabled() { 152 return false; 153 } 154 155 @Override 156 public void setThreadContentionMonitoringEnabled(boolean enable) { 157 } 158 159 @Override 160 public long getCurrentThreadCpuTime() { 161 return 0; 162 } 163 164 @Override 165 public long getCurrentThreadUserTime() { 166 return 0; 167 } 168 169 @Override 170 public long getThreadCpuTime(long id) { 171 return 0; 172 } 173 174 @Override 175 public long getThreadUserTime(long id) { 176 return 0; 177 } 178 179 @Override 180 public boolean isThreadCpuTimeSupported() { 181 return false; 182 } 183 184 @Override 185 public boolean isCurrentThreadCpuTimeSupported() { 186 return false; 187 } 188 189 @Override 190 public boolean isThreadCpuTimeEnabled() { 191 return false; 192 } 193 194 @Override 195 public void setThreadCpuTimeEnabled(boolean enable) { 196 } 197 198 @Override 199 public long[] findMonitorDeadlockedThreads() { 200 return null; 201 } 202 203 @Override 204 public void resetPeakThreadCount() { 205 } 206 207 @Override 208 public long[] findDeadlockedThreads() { 209 return null; 210 } 211 212 @Override 213 public boolean isObjectMonitorUsageSupported() { 214 return false; 215 } 216 217 @Override 218 public boolean isSynchronizerUsageSupported() { 219 return false; 220 } 221 222 @Override 223 public ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers) { 224 return null; 225 } 226 227 @Override 228 public ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers) { 229 return null; 230 } 231 } 232 }