Я хочу измерить процессорное время для моего Java-приложения, а не загрузку ЦП ОС, не использование / время ЦП для всей JVM и, следовательно, всех Java-приложений, работающих в системе, но только это одно Java-приложение.Для этой цели я решил использовать JNI.Измеряет ли этот код C ++ время ЦП для приложения Java, которое загружает библиотеку или всю JVM?
#include "JNIPipeline.h"
#include <windows.h>
#include <stdio.h>
#include <iostream>
unsigned __int64 fileTimeToUint64(FILETIME*);
static HANDLE s_currentProcess;
static int s_numberOfProcessors;
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
SYSTEM_INFO systemInfo;
GetSystemInfo(&systemInfo);
s_currentProcess = GetCurrentProcess();
s_numberOfProcessors = systemInfo.dwNumberOfProcessors;
return JNI_VERSION_1_6;
}
JNIEXPORT jlong JNICALL Java_org_server_util_JNIPipeline_getCPUTime(JNIEnv*, jobject) {
FILETIME creationTime, userTime, exitTime, kernelTime;
GetProcessTimes(s_currentProcess, &creationTime, &exitTime, &kernelTime, &userTime);
return (jlong)(fileTimeToUint64(&kernelTime) + fileTimeToUint64(&userTime)) / (s_numberOfProcessors * 10000);
}
unsigned __int64 fileTimeToUint64(FILETIME* ft) {
return (((unsigned __int64)ft->dwHighDateTime << 32) | ft->dwLowDateTime);
}
И это приемлемый способ измерения времени ЦП в миллисекундах?Обратите внимание, что я буду использовать измерения, чтобы нарисовать «график кривой».