Java5でヒープダンプを取得するためのJNIのサンプルコード
Java5でも(実行時にオプションで取得できるのだが)任意のタイミングで取得したかったのでちょっと調べてみた。ロックとかの制御が必要かも。
typedef jint (WINAPI * JDUMPHEAP)(JNIEnv* , jstring , jboolean ); JNIEXPORT void JNICALL Java_sample_HeapDumper_dumpHeap(JNIEnv * env, jclass clazz, jstring str){ HINSTANCE hInstDLL; JDUMPHEAP JVM_DumpHeap; if( (hInstDLL=LoadLibrary("jvm.dll"))==NULL){ printf("error"); return; } JVM_DumpHeap=(JDUMPHEAP)GetProcAddress(hInstDLL,"JVM_DumpHeap"); if (JVM_DumpHeap == NULL) { printf("dump heap api error"); return; } jboolean b =JNI_TRUE; JVM_DumpHeap(env,str,b); if(!FreeLibrary(hInstDLL)){ printf("free library error"); } }