Это правильный способ измерения времени процессора для конкретного приложения Java? - PullRequest
0 голосов
/ 15 мая 2011

Я хочу измерить процессорное время для моего 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);
}

И это приемлемый способ измерения времени ЦП в миллисекундах?Обратите внимание, что я буду использовать измерения, чтобы нарисовать «график кривой».

...