Path: blob/master/src/java.management/share/native/libmanagement/VMManagementImpl.c
41152 views
/*1* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425#include <jni.h>26#include <stdlib.h>27#include "jvm.h"28#include "management.h"29#include "sun_management_VMManagementImpl.h"3031#define MAX_VERSION_LEN 203233JNIEXPORT jstring JNICALL34Java_sun_management_VMManagementImpl_getVersion035(JNIEnv *env, jclass dummy)36{37char buf[MAX_VERSION_LEN];38jstring version_string = NULL;3940unsigned int major = ((unsigned int) jmm_version & 0x0FFF0000) >> 16;41unsigned int minor = ((unsigned int) jmm_version & 0xFF00) >> 8;4243// for internal use44unsigned int micro = (unsigned int) jmm_version & 0xFF;4546sprintf(buf, "%d.%d", major, minor);47version_string = (*env)->NewStringUTF(env, buf);48return version_string;49}5051static void setStaticBooleanField52(JNIEnv* env, jclass cls, const char* name, jboolean value)53{54jfieldID fid;55fid = (*env)->GetStaticFieldID(env, cls, name, "Z");56if (fid != 0) {57(*env)->SetStaticBooleanField(env, cls, fid, value);58}59}6061JNIEXPORT void JNICALL62Java_sun_management_VMManagementImpl_initOptionalSupportFields63(JNIEnv *env, jclass cls)64{65jmmOptionalSupport mos;66jint ret = jmm_interface->GetOptionalSupport(env, &mos);6768jboolean value;6970value = mos.isCompilationTimeMonitoringSupported;71setStaticBooleanField(env, cls, "compTimeMonitoringSupport", value);7273value = mos.isThreadContentionMonitoringSupported;74setStaticBooleanField(env, cls, "threadContentionMonitoringSupport", value);7576value = mos.isCurrentThreadCpuTimeSupported;77setStaticBooleanField(env, cls, "currentThreadCpuTimeSupport", value);7879value = mos.isOtherThreadCpuTimeSupported;80setStaticBooleanField(env, cls, "otherThreadCpuTimeSupport", value);8182if (jmm_version >= JMM_VERSION_1_1) {83value = mos.isObjectMonitorUsageSupported;84setStaticBooleanField(env, cls, "objectMonitorUsageSupport", value);8586value = mos.isSynchronizerUsageSupported;87setStaticBooleanField(env, cls, "synchronizerUsageSupport", value);88} else {89setStaticBooleanField(env, cls, "objectMonitorUsageSupport", JNI_FALSE);90setStaticBooleanField(env, cls, "synchronizerUsageSupport", JNI_FALSE);91}9293value = mos.isThreadAllocatedMemorySupported;94setStaticBooleanField(env, cls, "threadAllocatedMemorySupport", value);9596value = mos.isRemoteDiagnosticCommandsSupported;97setStaticBooleanField(env, cls, "remoteDiagnosticCommandsSupport", value);98}99100JNIEXPORT jobjectArray JNICALL101Java_sun_management_VMManagementImpl_getVmArguments0102(JNIEnv *env, jobject dummy)103{104return JVM_GetVmArguments(env);105}106107JNIEXPORT jlong JNICALL108Java_sun_management_VMManagementImpl_getTotalClassCount109(JNIEnv *env, jobject dummy)110{111/* JMM_CLASS_LOADED_COUNT is the total number of classes loaded */112jlong count = jmm_interface->GetLongAttribute(env, NULL,113JMM_CLASS_LOADED_COUNT);114return count;115}116117JNIEXPORT jlong JNICALL118Java_sun_management_VMManagementImpl_getUnloadedClassCount119(JNIEnv *env, jobject dummy)120{121/* JMM_CLASS_UNLOADED_COUNT is the total number of classes unloaded */122jlong count = jmm_interface->GetLongAttribute(env, NULL,123JMM_CLASS_UNLOADED_COUNT);124return count;125}126127JNIEXPORT jboolean JNICALL128Java_sun_management_VMManagementImpl_getVerboseGC129(JNIEnv *env, jobject dummy)130{131return jmm_interface->GetBoolAttribute(env, JMM_VERBOSE_GC);132}133134JNIEXPORT jboolean JNICALL135Java_sun_management_VMManagementImpl_getVerboseClass136(JNIEnv *env, jobject dummy)137{138return jmm_interface->GetBoolAttribute(env, JMM_VERBOSE_CLASS);139}140141JNIEXPORT jlong JNICALL142Java_sun_management_VMManagementImpl_getTotalThreadCount143(JNIEnv *env, jobject dummy)144{145return jmm_interface->GetLongAttribute(env, NULL,146JMM_THREAD_TOTAL_COUNT);147}148149JNIEXPORT jint JNICALL150Java_sun_management_VMManagementImpl_getLiveThreadCount151(JNIEnv *env, jobject dummy)152{153jlong count = jmm_interface->GetLongAttribute(env, NULL,154JMM_THREAD_LIVE_COUNT);155return (jint) count;156}157158JNIEXPORT jint JNICALL159Java_sun_management_VMManagementImpl_getPeakThreadCount160(JNIEnv *env, jobject dummy)161{162jlong count = jmm_interface->GetLongAttribute(env, NULL,163JMM_THREAD_PEAK_COUNT);164return (jint) count;165}166167JNIEXPORT jint JNICALL168Java_sun_management_VMManagementImpl_getDaemonThreadCount169(JNIEnv *env, jobject dummy)170{171jlong count = jmm_interface->GetLongAttribute(env, NULL,172JMM_THREAD_DAEMON_COUNT);173return (jint) count;174}175176JNIEXPORT jlong JNICALL177Java_sun_management_VMManagementImpl_getTotalCompileTime178(JNIEnv *env, jobject dummy)179{180return jmm_interface->GetLongAttribute(env, NULL,181JMM_COMPILE_TOTAL_TIME_MS);182}183184JNIEXPORT jlong JNICALL185Java_sun_management_VMManagementImpl_getStartupTime186(JNIEnv *env, jobject dummy)187{188return jmm_interface->GetLongAttribute(env, NULL,189JMM_JVM_INIT_DONE_TIME_MS);190}191192JNIEXPORT jlong JNICALL193Java_sun_management_VMManagementImpl_getUptime0194(JNIEnv *env, jobject dummy)195{196return jmm_interface->GetLongAttribute(env, NULL, JMM_JVM_UPTIME_MS);197}198199JNIEXPORT jboolean JNICALL200Java_sun_management_VMManagementImpl_isThreadContentionMonitoringEnabled201(JNIEnv *env, jobject dummy)202{203return jmm_interface->GetBoolAttribute(env,204JMM_THREAD_CONTENTION_MONITORING);205}206207JNIEXPORT jboolean JNICALL208Java_sun_management_VMManagementImpl_isThreadCpuTimeEnabled209(JNIEnv *env, jobject dummy)210{211return jmm_interface->GetBoolAttribute(env, JMM_THREAD_CPU_TIME);212}213214JNIEXPORT jboolean JNICALL215Java_sun_management_VMManagementImpl_isThreadAllocatedMemoryEnabled216(JNIEnv *env, jobject dummy)217{218return jmm_interface->GetBoolAttribute(env, JMM_THREAD_ALLOCATED_MEMORY);219}220221JNIEXPORT jint JNICALL222Java_sun_management_VMManagementImpl_getProcessId223(JNIEnv *env, jobject dummy)224{225jlong pid = jmm_interface->GetLongAttribute(env, NULL,226JMM_OS_PROCESS_ID);227return (jint) pid;228}229230JNIEXPORT jint JNICALL231Java_sun_management_VMManagementImpl_getAvailableProcessors232(JNIEnv *env, jobject dummy)233{234return JVM_ActiveProcessorCount();235}236237JNIEXPORT jlong JNICALL238Java_sun_management_VMManagementImpl_getSafepointCount239(JNIEnv *env, jobject dummy)240{241return jmm_interface->GetLongAttribute(env, NULL,242JMM_SAFEPOINT_COUNT);243}244245JNIEXPORT jlong JNICALL246Java_sun_management_VMManagementImpl_getTotalSafepointTime247(JNIEnv *env, jobject dummy)248{249return jmm_interface->GetLongAttribute(env, NULL,250JMM_TOTAL_STOPPED_TIME_MS);251}252253JNIEXPORT jlong JNICALL254Java_sun_management_VMManagementImpl_getSafepointSyncTime255(JNIEnv *env, jobject dummy)256{257return jmm_interface->GetLongAttribute(env, NULL,258JMM_TOTAL_SAFEPOINTSYNC_TIME_MS);259}260261JNIEXPORT jlong JNICALL262Java_sun_management_VMManagementImpl_getTotalApplicationNonStoppedTime263(JNIEnv *env, jobject dummy)264{265return jmm_interface->GetLongAttribute(env, NULL,266JMM_TOTAL_APP_TIME_MS);267}268269JNIEXPORT jlong JNICALL270Java_sun_management_VMManagementImpl_getLoadedClassSize271(JNIEnv *env, jobject dummy)272{273return jmm_interface->GetLongAttribute(env, NULL,274JMM_CLASS_LOADED_BYTES);275}276277JNIEXPORT jlong JNICALL278Java_sun_management_VMManagementImpl_getUnloadedClassSize279(JNIEnv *env, jobject dummy)280{281return jmm_interface->GetLongAttribute(env, NULL,282JMM_CLASS_UNLOADED_BYTES);283}284JNIEXPORT jlong JNICALL285Java_sun_management_VMManagementImpl_getClassLoadingTime286(JNIEnv *env, jobject dummy)287{288return jmm_interface->GetLongAttribute(env, NULL,289JMM_TOTAL_CLASSLOAD_TIME_MS);290}291292293JNIEXPORT jlong JNICALL294Java_sun_management_VMManagementImpl_getMethodDataSize295(JNIEnv *env, jobject dummy)296{297return jmm_interface->GetLongAttribute(env, NULL,298JMM_METHOD_DATA_SIZE_BYTES);299}300301JNIEXPORT jlong JNICALL302Java_sun_management_VMManagementImpl_getInitializedClassCount303(JNIEnv *env, jobject dummy)304{305return jmm_interface->GetLongAttribute(env, NULL,306JMM_CLASS_INIT_TOTAL_COUNT);307}308309JNIEXPORT jlong JNICALL310Java_sun_management_VMManagementImpl_getClassInitializationTime311(JNIEnv *env, jobject dummy)312{313return jmm_interface->GetLongAttribute(env, NULL,314JMM_CLASS_INIT_TOTAL_TIME_MS);315}316317JNIEXPORT jlong JNICALL318Java_sun_management_VMManagementImpl_getClassVerificationTime319(JNIEnv *env, jobject dummy)320{321return jmm_interface->GetLongAttribute(env, NULL,322JMM_CLASS_VERIFY_TOTAL_TIME_MS);323}324325326