Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/native/sun/management/VMManagementImpl.c
38829 views
/*1* Copyright (c) 2003, 2013, 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);8182value = mos.isBootClassPathSupported;83setStaticBooleanField(env, cls, "bootClassPathSupport", value);8485if (jmm_version >= JMM_VERSION_1_1) {86value = mos.isObjectMonitorUsageSupported;87setStaticBooleanField(env, cls, "objectMonitorUsageSupport", value);8889value = mos.isSynchronizerUsageSupported;90setStaticBooleanField(env, cls, "synchronizerUsageSupport", value);91} else {92setStaticBooleanField(env, cls, "objectMonitorUsageSupport", JNI_FALSE);93setStaticBooleanField(env, cls, "synchronizerUsageSupport", JNI_FALSE);94}9596value = mos.isThreadAllocatedMemorySupported;97setStaticBooleanField(env, cls, "threadAllocatedMemorySupport", value);9899value = mos.isRemoteDiagnosticCommandsSupported;100setStaticBooleanField(env, cls, "remoteDiagnosticCommandsSupport", value);101102if ((jmm_version > JMM_VERSION_1_2) ||103(jmm_version == JMM_VERSION_1_2 && ((jmm_version&0xFF) >= 1))) {104setStaticBooleanField(env, cls, "gcNotificationSupport", JNI_TRUE);105} else {106setStaticBooleanField(env, cls, "gcNotificationSupport", JNI_FALSE);107}108}109110JNIEXPORT jobjectArray JNICALL111Java_sun_management_VMManagementImpl_getVmArguments0112(JNIEnv *env, jobject dummy)113{114return jmm_interface->GetInputArgumentArray(env);115}116117JNIEXPORT jlong JNICALL118Java_sun_management_VMManagementImpl_getTotalClassCount119(JNIEnv *env, jobject dummy)120{121/* JMM_CLASS_LOADED_COUNT is the total number of classes loaded */122jlong count = jmm_interface->GetLongAttribute(env, NULL,123JMM_CLASS_LOADED_COUNT);124return count;125}126127JNIEXPORT jlong JNICALL128Java_sun_management_VMManagementImpl_getUnloadedClassCount129(JNIEnv *env, jobject dummy)130{131/* JMM_CLASS_UNLOADED_COUNT is the total number of classes unloaded */132jlong count = jmm_interface->GetLongAttribute(env, NULL,133JMM_CLASS_UNLOADED_COUNT);134return count;135}136137JNIEXPORT jboolean JNICALL138Java_sun_management_VMManagementImpl_getVerboseGC139(JNIEnv *env, jobject dummy)140{141return jmm_interface->GetBoolAttribute(env, JMM_VERBOSE_GC);142}143144JNIEXPORT jboolean JNICALL145Java_sun_management_VMManagementImpl_getVerboseClass146(JNIEnv *env, jobject dummy)147{148return jmm_interface->GetBoolAttribute(env, JMM_VERBOSE_CLASS);149}150151JNIEXPORT jlong JNICALL152Java_sun_management_VMManagementImpl_getTotalThreadCount153(JNIEnv *env, jobject dummy)154{155return jmm_interface->GetLongAttribute(env, NULL,156JMM_THREAD_TOTAL_COUNT);157}158159JNIEXPORT jint JNICALL160Java_sun_management_VMManagementImpl_getLiveThreadCount161(JNIEnv *env, jobject dummy)162{163jlong count = jmm_interface->GetLongAttribute(env, NULL,164JMM_THREAD_LIVE_COUNT);165return (jint) count;166}167168JNIEXPORT jint JNICALL169Java_sun_management_VMManagementImpl_getPeakThreadCount170(JNIEnv *env, jobject dummy)171{172jlong count = jmm_interface->GetLongAttribute(env, NULL,173JMM_THREAD_PEAK_COUNT);174return (jint) count;175}176177JNIEXPORT jint JNICALL178Java_sun_management_VMManagementImpl_getDaemonThreadCount179(JNIEnv *env, jobject dummy)180{181jlong count = jmm_interface->GetLongAttribute(env, NULL,182JMM_THREAD_DAEMON_COUNT);183return (jint) count;184}185186JNIEXPORT jlong JNICALL187Java_sun_management_VMManagementImpl_getTotalCompileTime188(JNIEnv *env, jobject dummy)189{190return jmm_interface->GetLongAttribute(env, NULL,191JMM_COMPILE_TOTAL_TIME_MS);192}193194JNIEXPORT jlong JNICALL195Java_sun_management_VMManagementImpl_getStartupTime196(JNIEnv *env, jobject dummy)197{198return jmm_interface->GetLongAttribute(env, NULL,199JMM_JVM_INIT_DONE_TIME_MS);200}201202JNIEXPORT jlong JNICALL203Java_sun_management_VMManagementImpl_getUptime0204(JNIEnv *env, jobject dummy)205{206return jmm_interface->GetLongAttribute(env, NULL, JMM_JVM_UPTIME_MS);207}208209JNIEXPORT jboolean JNICALL210Java_sun_management_VMManagementImpl_isThreadContentionMonitoringEnabled211(JNIEnv *env, jobject dummy)212{213return jmm_interface->GetBoolAttribute(env,214JMM_THREAD_CONTENTION_MONITORING);215}216217JNIEXPORT jboolean JNICALL218Java_sun_management_VMManagementImpl_isThreadCpuTimeEnabled219(JNIEnv *env, jobject dummy)220{221return jmm_interface->GetBoolAttribute(env, JMM_THREAD_CPU_TIME);222}223224JNIEXPORT jboolean JNICALL225Java_sun_management_VMManagementImpl_isThreadAllocatedMemoryEnabled226(JNIEnv *env, jobject dummy)227{228return jmm_interface->GetBoolAttribute(env, JMM_THREAD_ALLOCATED_MEMORY);229}230231JNIEXPORT jint JNICALL232Java_sun_management_VMManagementImpl_getProcessId233(JNIEnv *env, jobject dummy)234{235jlong pid = jmm_interface->GetLongAttribute(env, NULL,236JMM_OS_PROCESS_ID);237return (jint) pid;238}239240JNIEXPORT jint JNICALL241Java_sun_management_VMManagementImpl_getAvailableProcessors242(JNIEnv *env, jobject dummy)243{244return JVM_ActiveProcessorCount();245}246247JNIEXPORT jlong JNICALL248Java_sun_management_VMManagementImpl_getSafepointCount249(JNIEnv *env, jobject dummy)250{251return jmm_interface->GetLongAttribute(env, NULL,252JMM_SAFEPOINT_COUNT);253}254255JNIEXPORT jlong JNICALL256Java_sun_management_VMManagementImpl_getTotalSafepointTime257(JNIEnv *env, jobject dummy)258{259return jmm_interface->GetLongAttribute(env, NULL,260JMM_TOTAL_STOPPED_TIME_MS);261}262263JNIEXPORT jlong JNICALL264Java_sun_management_VMManagementImpl_getSafepointSyncTime265(JNIEnv *env, jobject dummy)266{267return jmm_interface->GetLongAttribute(env, NULL,268JMM_TOTAL_SAFEPOINTSYNC_TIME_MS);269}270271JNIEXPORT jlong JNICALL272Java_sun_management_VMManagementImpl_getTotalApplicationNonStoppedTime273(JNIEnv *env, jobject dummy)274{275return jmm_interface->GetLongAttribute(env, NULL,276JMM_TOTAL_APP_TIME_MS);277}278279JNIEXPORT jlong JNICALL280Java_sun_management_VMManagementImpl_getLoadedClassSize281(JNIEnv *env, jobject dummy)282{283return jmm_interface->GetLongAttribute(env, NULL,284JMM_CLASS_LOADED_BYTES);285}286287JNIEXPORT jlong JNICALL288Java_sun_management_VMManagementImpl_getUnloadedClassSize289(JNIEnv *env, jobject dummy)290{291return jmm_interface->GetLongAttribute(env, NULL,292JMM_CLASS_UNLOADED_BYTES);293}294JNIEXPORT jlong JNICALL295Java_sun_management_VMManagementImpl_getClassLoadingTime296(JNIEnv *env, jobject dummy)297{298return jmm_interface->GetLongAttribute(env, NULL,299JMM_TOTAL_CLASSLOAD_TIME_MS);300}301302303JNIEXPORT jlong JNICALL304Java_sun_management_VMManagementImpl_getMethodDataSize305(JNIEnv *env, jobject dummy)306{307return jmm_interface->GetLongAttribute(env, NULL,308JMM_METHOD_DATA_SIZE_BYTES);309}310311JNIEXPORT jlong JNICALL312Java_sun_management_VMManagementImpl_getInitializedClassCount313(JNIEnv *env, jobject dummy)314{315return jmm_interface->GetLongAttribute(env, NULL,316JMM_CLASS_INIT_TOTAL_COUNT);317}318319JNIEXPORT jlong JNICALL320Java_sun_management_VMManagementImpl_getClassInitializationTime321(JNIEnv *env, jobject dummy)322{323return jmm_interface->GetLongAttribute(env, NULL,324JMM_CLASS_INIT_TOTAL_TIME_MS);325}326327JNIEXPORT jlong JNICALL328Java_sun_management_VMManagementImpl_getClassVerificationTime329(JNIEnv *env, jobject dummy)330{331return jmm_interface->GetLongAttribute(env, NULL,332JMM_CLASS_VERIFY_TOTAL_TIME_MS);333}334335336