void VM_Memory (env)
JNIEnv *env; /* I JNI インターフェース・ポインタ */
{
jclass targetClass = NULL;
jmethodID mid = NULL;
jobject objA = NULL;
jlong ltotalMemory;
jlong lfreeMemory;
/* java.lang.Runtime クラスをロードします。*/
targetClass = (*env)->FindClass (env, "Ljava/lang/Runtime;");
if (targetClass == NULL)
{
OutputDebugString ("java.lang.Runtime の (*env)->FindClass に失敗\n");
return;
}
/* スタティック・メソッド getRuntime の ID を取得。 */
mid = (*env)->GetStaticMethodID (env, targetClass, "getRuntime", "()Ljava/lang/Runtime;");
if (mid == NULL)
{
OutputDebugString ("java.lang.Runtime の スタティック・メソッド getRuntime の ID の 取得に失敗\n");
goto DELETE_PROC;
}
/* getRuntime () の呼び出し。 */
objA = (*env)->CallStaticObjectMethod (env, targetClass, mid);
if (objA == NULL)
{
OutputDebugString ("java.lang.Runtime の getRuntime() の呼び出しに失敗\n");
goto DELETE_PROC;
}
/* totalMemory() のメソッドIDを取得。 */
mid = (*env)->GetMethodID (env, targetClass, "totalMemory", "()J");
if (mid == NULL)
{
OutputDebugString ("java.lang.Runtime の totalMemory() のメソッドID の 取得に失敗\n");
goto DELETE_PROC;
}
/* Java 仮想マシンのメモリの総容量を取得します。 */
ltotalMemory = (*env)->CallLongMethod (env, objA, mid);
/* freeMemory() のメソッドIDを取得。 */
mid = (*env)->GetMethodID (env, targetClass, "freeMemory", "()J");
if (mid == NULL)
{
OutputDebugString ("java.lang.Runtime の freeMemory() のメソッドID の 取得に失敗\n");
goto DELETE_PROC;
}
/* Java 仮想マシン内の空きメモリの量を取得します。 */
lfreeMemory = (*env)->CallLongMethod (env, objA, mid);
{
char szMsg[512];
wsprintf (szMsg, "Java 仮想マシンのメモリの総容量 : %20ld\tJava 仮想マシン内の空きメモリ量 : %20ld\n", ltotalMemory, lfreeMemory);
OutputDebugString (szMsg);
}
DELETE_PROC:
if (objA != NULL)
{
(*env)->DeleteLocalRef (env, objA);
objA = NULL;
}
if (mid != NULL)
{
// (*env)->DeleteLocalRef (env, mid);
mid = NULL;
}
if (targetClass != NULL)
{
(*env)->DeleteLocalRef (env, targetClass);
targetClass = NULL;
}
return;
}
|