mirror of
https://github.com/openjdk/jdk.git
synced 2026-01-29 04:28:30 +00:00
325 lines
10 KiB
C
325 lines
10 KiB
C
/*
|
|
* 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 <jni.h>
|
|
#include <stdlib.h>
|
|
#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);
|
|
}
|