diff -r 4ebc2e2fb97c -r 71c04702a3d5 src/java.management/share/native/libmanagement/VMManagementImpl.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/java.management/share/native/libmanagement/VMManagementImpl.c Tue Sep 12 19:03:39 2017 +0200 @@ -0,0 +1,324 @@ +/* + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include "jvm.h" +#include "management.h" +#include "sun_management_VMManagementImpl.h" + +#define MAX_VERSION_LEN 20 + +JNIEXPORT jstring JNICALL +Java_sun_management_VMManagementImpl_getVersion0 + (JNIEnv *env, jclass dummy) +{ + char buf[MAX_VERSION_LEN]; + jstring version_string = NULL; + + unsigned int major = ((unsigned int) jmm_version & 0x0FFF0000) >> 16; + unsigned int minor = ((unsigned int) jmm_version & 0xFF00) >> 8; + + // for internal use + unsigned int micro = (unsigned int) jmm_version & 0xFF; + + sprintf(buf, "%d.%d", major, minor); + version_string = (*env)->NewStringUTF(env, buf); + return version_string; +} + +static void setStaticBooleanField + (JNIEnv* env, jclass cls, const char* name, jboolean value) +{ + jfieldID fid; + fid = (*env)->GetStaticFieldID(env, cls, name, "Z"); + if (fid != 0) { + (*env)->SetStaticBooleanField(env, cls, fid, value); + } +} + +JNIEXPORT void JNICALL +Java_sun_management_VMManagementImpl_initOptionalSupportFields + (JNIEnv *env, jclass cls) +{ + jmmOptionalSupport mos; + jint ret = jmm_interface->GetOptionalSupport(env, &mos); + + jboolean value; + + value = mos.isCompilationTimeMonitoringSupported; + setStaticBooleanField(env, cls, "compTimeMonitoringSupport", value); + + value = mos.isThreadContentionMonitoringSupported; + setStaticBooleanField(env, cls, "threadContentionMonitoringSupport", value); + + value = mos.isCurrentThreadCpuTimeSupported; + setStaticBooleanField(env, cls, "currentThreadCpuTimeSupport", value); + + value = mos.isOtherThreadCpuTimeSupported; + setStaticBooleanField(env, cls, "otherThreadCpuTimeSupport", value); + + if (jmm_version >= JMM_VERSION_1_1) { + value = mos.isObjectMonitorUsageSupported; + setStaticBooleanField(env, cls, "objectMonitorUsageSupport", value); + + value = mos.isSynchronizerUsageSupported; + setStaticBooleanField(env, cls, "synchronizerUsageSupport", value); + } else { + setStaticBooleanField(env, cls, "objectMonitorUsageSupport", JNI_FALSE); + setStaticBooleanField(env, cls, "synchronizerUsageSupport", JNI_FALSE); + } + + value = mos.isThreadAllocatedMemorySupported; + setStaticBooleanField(env, cls, "threadAllocatedMemorySupport", value); + + value = mos.isRemoteDiagnosticCommandsSupported; + setStaticBooleanField(env, cls, "remoteDiagnosticCommandsSupport", value); +} + +JNIEXPORT jobjectArray JNICALL +Java_sun_management_VMManagementImpl_getVmArguments0 + (JNIEnv *env, jobject dummy) +{ + return JVM_GetVmArguments(env); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getTotalClassCount + (JNIEnv *env, jobject dummy) +{ + /* JMM_CLASS_LOADED_COUNT is the total number of classes loaded */ + jlong count = jmm_interface->GetLongAttribute(env, NULL, + JMM_CLASS_LOADED_COUNT); + return count; +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getUnloadedClassCount + (JNIEnv *env, jobject dummy) +{ + /* JMM_CLASS_UNLOADED_COUNT is the total number of classes unloaded */ + jlong count = jmm_interface->GetLongAttribute(env, NULL, + JMM_CLASS_UNLOADED_COUNT); + return count; +} + +JNIEXPORT jboolean JNICALL +Java_sun_management_VMManagementImpl_getVerboseGC + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetBoolAttribute(env, JMM_VERBOSE_GC); +} + +JNIEXPORT jboolean JNICALL +Java_sun_management_VMManagementImpl_getVerboseClass + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetBoolAttribute(env, JMM_VERBOSE_CLASS); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getTotalThreadCount + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_THREAD_TOTAL_COUNT); +} + +JNIEXPORT jint JNICALL +Java_sun_management_VMManagementImpl_getLiveThreadCount + (JNIEnv *env, jobject dummy) +{ + jlong count = jmm_interface->GetLongAttribute(env, NULL, + JMM_THREAD_LIVE_COUNT); + return (jint) count; +} + +JNIEXPORT jint JNICALL +Java_sun_management_VMManagementImpl_getPeakThreadCount + (JNIEnv *env, jobject dummy) +{ + jlong count = jmm_interface->GetLongAttribute(env, NULL, + JMM_THREAD_PEAK_COUNT); + return (jint) count; +} + +JNIEXPORT jint JNICALL +Java_sun_management_VMManagementImpl_getDaemonThreadCount + (JNIEnv *env, jobject dummy) +{ + jlong count = jmm_interface->GetLongAttribute(env, NULL, + JMM_THREAD_DAEMON_COUNT); + return (jint) count; +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getTotalCompileTime + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_COMPILE_TOTAL_TIME_MS); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getStartupTime + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_JVM_INIT_DONE_TIME_MS); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getUptime0 + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, JMM_JVM_UPTIME_MS); +} + +JNIEXPORT jboolean JNICALL +Java_sun_management_VMManagementImpl_isThreadContentionMonitoringEnabled + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetBoolAttribute(env, + JMM_THREAD_CONTENTION_MONITORING); +} + +JNIEXPORT jboolean JNICALL +Java_sun_management_VMManagementImpl_isThreadCpuTimeEnabled + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetBoolAttribute(env, JMM_THREAD_CPU_TIME); +} + +JNIEXPORT jboolean JNICALL +Java_sun_management_VMManagementImpl_isThreadAllocatedMemoryEnabled + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetBoolAttribute(env, JMM_THREAD_ALLOCATED_MEMORY); +} + +JNIEXPORT jint JNICALL +Java_sun_management_VMManagementImpl_getProcessId + (JNIEnv *env, jobject dummy) +{ + jlong pid = jmm_interface->GetLongAttribute(env, NULL, + JMM_OS_PROCESS_ID); + return (jint) pid; +} + +JNIEXPORT jint JNICALL +Java_sun_management_VMManagementImpl_getAvailableProcessors + (JNIEnv *env, jobject dummy) +{ + return JVM_ActiveProcessorCount(); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getSafepointCount + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_SAFEPOINT_COUNT); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getTotalSafepointTime + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_TOTAL_STOPPED_TIME_MS); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getSafepointSyncTime + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_TOTAL_SAFEPOINTSYNC_TIME_MS); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getTotalApplicationNonStoppedTime + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_TOTAL_APP_TIME_MS); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getLoadedClassSize + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_CLASS_LOADED_BYTES); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getUnloadedClassSize + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_CLASS_UNLOADED_BYTES); +} +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getClassLoadingTime + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_TOTAL_CLASSLOAD_TIME_MS); +} + + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getMethodDataSize + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_METHOD_DATA_SIZE_BYTES); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getInitializedClassCount + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_CLASS_INIT_TOTAL_COUNT); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getClassInitializationTime + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_CLASS_INIT_TOTAL_TIME_MS); +} + +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getClassVerificationTime + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, + JMM_CLASS_VERIFY_TOTAL_TIME_MS); +}