+++ /dev/null
-/*\r
- * @(#)jvmpi.h 1.28 03/12/19\r
- *\r
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.\r
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\r
- */\r
-\r
-#ifndef _JAVASOFT_JVMPI_H_\r
-#define _JAVASOFT_JVMPI_H_\r
-\r
-#include "jni.h"\r
-\r
-#define JVMPI_VERSION_1 ((jint)0x10000001) /* implied 0 for minor version */\r
-#define JVMPI_VERSION_1_1 ((jint)0x10000002)\r
-#define JVMPI_VERSION_1_2 ((jint)0x10000003)\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
- typedef void (*jvmpi_void_function_of_void)(void *);\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-/****************************************************************\r
- * Profiler interface data structures.\r
- ****************************************************************/\r
-/* identifier types. */\r
-struct _jobjectID;\r
-typedef struct _jobjectID * jobjectID; /* type of object ids */ \r
-\r
-/* raw monitors */\r
-struct _JVMPI_RawMonitor;\r
-typedef struct _JVMPI_RawMonitor * JVMPI_RawMonitor;\r
-\r
-/* call frame */\r
-typedef struct {\r
- jint lineno; /* line number in the source file */\r
- jmethodID method_id; /* method executed in this frame */\r
-} JVMPI_CallFrame;\r
-\r
-/* call trace */\r
-typedef struct {\r
- JNIEnv *env_id; /* Env where trace was recorded */\r
- jint num_frames; /* number of frames in this trace */\r
- JVMPI_CallFrame *frames; /* frames */\r
-} JVMPI_CallTrace;\r
-\r
-/* method */\r
-typedef struct {\r
- char *method_name; /* name of method */\r
- char *method_signature; /* signature of method */\r
- jint start_lineno; /* -1 if native, abstract .. */\r
- jint end_lineno; /* -1 if native, abstract .. */\r
- jmethodID method_id; /* id assigned to this method */\r
-} JVMPI_Method;\r
-\r
-/* Field */\r
-typedef struct {\r
- char *field_name; /* name of field */\r
- char *field_signature; /* signature of field */\r
-} JVMPI_Field;\r
-\r
-/* line number info for a compiled method */\r
-typedef struct {\r
- jint offset; /* offset from beginning of method */\r
- jint lineno; /* lineno from beginning of src file */\r
-} JVMPI_Lineno;\r
-\r
-/* event */\r
-typedef struct {\r
- jint event_type; /* event_type */\r
- JNIEnv *env_id; /* env where this event occured */\r
- \r
- union {\r
- struct {\r
- const char *class_name; /* class name */\r
- char *source_name; /* name of source file */\r
- jint num_interfaces; /* number of interfaces implemented */\r
- jint num_methods; /* number of methods in the class */\r
- JVMPI_Method *methods; /* methods */\r
- jint num_static_fields; /* number of static fields */\r
- JVMPI_Field *statics; /* static fields */\r
- jint num_instance_fields; /* number of instance fields */\r
- JVMPI_Field *instances; /* instance fields */\r
- jobjectID class_id; /* id of the class object */\r
- } class_load;\r
-\r
- struct {\r
- jobjectID class_id; /* id of the class object */\r
- } class_unload;\r
-\r
- struct {\r
- unsigned char *class_data; /* content of class file */\r
- jint class_data_len; /* class file length */\r
- unsigned char *new_class_data; /* instrumented class file */\r
- jint new_class_data_len; /* new class file length */\r
- void * (*malloc_f)(unsigned int); /* memory allocation function */\r
- } class_load_hook;\r
-\r
- struct {\r
- jint arena_id;\r
- jobjectID class_id; /* id of object class */\r
- jint is_array; /* JVMPI_NORMAL_OBJECT, ... */\r
- jint size; /* size in number of bytes */\r
- jobjectID obj_id; /* id assigned to this object */\r
- } obj_alloc;\r
-\r
- struct {\r
- jobjectID obj_id; /* id of the object */\r
- } obj_free;\r
-\r
- struct {\r
- jint arena_id; /* cur arena id */\r
- jobjectID obj_id; /* cur object id */\r
- jint new_arena_id; /* new arena id */\r
- jobjectID new_obj_id; /* new object id */ \r
- } obj_move;\r
-\r
- struct {\r
- jint arena_id; /* id of arena */\r
- const char *arena_name; /* name of arena */\r
- } new_arena;\r
-\r
- struct {\r
- jint arena_id; /* id of arena */\r
- } delete_arena;\r
-\r
- struct {\r
- char *thread_name; /* name of thread */\r
- char *group_name; /* name of group */\r
- char *parent_name; /* name of parent */\r
- jobjectID thread_id; /* id of the thread object */\r
- JNIEnv *thread_env_id;\r
- } thread_start;\r
-\r
- struct {\r
- int dump_level; /* level of the heap dump info */\r
- char *begin; /* where all the root records begin,\r
- please see the heap dump buffer \r
- format described below */\r
- char *end; /* where the object records end. */\r
- jint num_traces; /* number of thread traces, \r
- 0 if dump level = JVMPI_DUMP_LEVEL_0 */\r
- JVMPI_CallTrace *traces; /* thread traces collected during \r
- heap dump */ \r
- } heap_dump;\r
-\r
- struct {\r
- jobjectID obj_id; /* object id */\r
- jobject ref_id; /* id assigned to the globalref */\r
- } jni_globalref_alloc;\r
- \r
- struct {\r
- jobject ref_id; /* id of the global ref */\r
- } jni_globalref_free;\r
-\r
- struct {\r
- jmethodID method_id; /* method */\r
- } method;\r
-\r
- struct {\r
- jmethodID method_id; /* id of method */\r
- jobjectID obj_id; /* id of target object */\r
- } method_entry2;\r
-\r
- struct {\r
- jmethodID method_id; /* id of compiled method */\r
- void *code_addr; /* code start addr. in memory */\r
- jint code_size; /* code size */\r
- jint lineno_table_size; /* size of lineno table */\r
- JVMPI_Lineno *lineno_table; /* lineno info */\r
- } compiled_method_load;\r
- \r
- struct {\r
- jmethodID method_id; /* id of unloaded compiled method */\r
- } compiled_method_unload;\r
-\r
- struct {\r
- jmethodID method_id; /* id of the method the instruction belongs to */\r
- jint offset; /* instruction offset in the method's bytecode */\r
- union {\r
- struct {\r
- jboolean is_true; /* whether true or false branch is taken */\r
- } if_info;\r
- struct {\r
- jint key; /* top stack value used as an index */\r
- jint low; /* min value of the index */\r
- jint hi; /* max value of the index */\r
- } tableswitch_info;\r
- struct {\r
- jint chosen_pair_index; /* actually chosen pair index (0-based)\r
- * if chosen_pair_index == pairs_total then\r
- * the 'default' branch is taken\r
- */\r
- jint pairs_total; /* total number of lookupswitch pairs */\r
- } lookupswitch_info;\r
- } u;\r
- } instruction;\r
- \r
- struct {\r
- char *begin; /* beginning of dump buffer, \r
- see below for format */\r
- char *end; /* end of dump buffer */\r
- jint num_traces; /* number of traces */\r
- JVMPI_CallTrace *traces; /* traces of all threads */\r
- jint *threads_status; /* status of all threads */\r
- } monitor_dump;\r
-\r
- struct {\r
- const char *name; /* name of raw monitor */\r
- JVMPI_RawMonitor id; /* id */\r
- } raw_monitor;\r
-\r
- struct {\r
- jobjectID object; /* Java object */\r
- } monitor;\r
-\r
- struct {\r
- jobjectID object; /* Java object */\r
- jlong timeout; /* timeout period */\r
- } monitor_wait;\r
-\r
- struct {\r
- jlong used_objects;\r
- jlong used_object_space;\r
- jlong total_object_space;\r
- } gc_info;\r
-\r
- struct {\r
- jint data_len;\r
- char *data;\r
- } object_dump;\r
- } u;\r
-} JVMPI_Event;\r
-\r
-/* interface functions */\r
-typedef struct {\r
- jint version; /* JVMPI version */\r
- \r
- /* ------interface implemented by the profiler------ */\r
-\r
- /**\r
- * Function called by the JVM to notify an event. \r
- */\r
- void (*NotifyEvent)(JVMPI_Event *event);\r
- \r
- /* ------interface implemented by the JVM------ */\r
- \r
- /**\r
- * Function called by the profiler to enable/disable/send notification \r
- * for a particular event type. \r
- * \r
- * event_type - event_type\r
- * arg - event specific arg\r
- *\r
- * return JVMPI_NOT_AVAILABLE, JVMPI_SUCCESS or JVMPI_FAIL\r
- */\r
- jint (*EnableEvent)(jint event_type, void *arg);\r
- jint (*DisableEvent)(jint event_type, void *arg);\r
- jint (*RequestEvent)(jint event_type, void *arg);\r
- \r
- /**\r
- * Function called by the profiler to get a stack\r
- * trace from the JVM.\r
- *\r
- * trace - trace data structure to be filled\r
- * depth - maximum depth of the trace.\r
- */\r
- void (*GetCallTrace)(JVMPI_CallTrace *trace, jint depth);\r
-\r
- /**\r
- * Function called by profiler when it wants to exit/stop.\r
- */\r
- void (*ProfilerExit)(jint);\r
-\r
- /**\r
- * Utility functions provided by the JVM.\r
- */\r
- JVMPI_RawMonitor (*RawMonitorCreate)(char *lock_name);\r
- void (*RawMonitorEnter)(JVMPI_RawMonitor lock_id);\r
- void (*RawMonitorExit)(JVMPI_RawMonitor lock_id);\r
- void (*RawMonitorWait)(JVMPI_RawMonitor lock_id, jlong ms);\r
- void (*RawMonitorNotifyAll)(JVMPI_RawMonitor lock_id);\r
- void (*RawMonitorDestroy)(JVMPI_RawMonitor lock_id);\r
-\r
- /**\r
- * Function called by the profiler to get the current thread's CPU time.\r
- *\r
- * return time in nanoseconds;\r
- */\r
- jlong (*GetCurrentThreadCpuTime)(void);\r
-\r
- void (*SuspendThread)(JNIEnv *env);\r
- void (*ResumeThread)(JNIEnv *env);\r
- jint (*GetThreadStatus)(JNIEnv *env);\r
- jboolean (*ThreadHasRun)(JNIEnv *env);\r
-\r
- /* This function can be called safely only after JVMPI_EVENT_VM_INIT_DONE\r
- notification by the JVM. */\r
- jint (*CreateSystemThread)(char *name, jint priority, void (*f)(void *));\r
-\r
- /* thread local storage access functions to avoid locking in time \r
- critical functions */\r
- void (*SetThreadLocalStorage)(JNIEnv *env_id, void *ptr);\r
- void * (*GetThreadLocalStorage)(JNIEnv *env_id);\r
-\r
- /* control GC */\r
- void (*DisableGC)(void);\r
- void (*EnableGC)(void);\r
- void (*RunGC)(void);\r
-\r
- jobjectID (*GetThreadObject)(JNIEnv *env);\r
- jobjectID (*GetMethodClass)(jmethodID mid);\r
-\r
- /* JNI <-> jobject conversions */\r
- jobject (*jobjectID2jobject)(jobjectID jid);\r
- jobjectID (*jobject2jobjectID)(jobject jobj);\r
-\r
- void (*SuspendThreadList)\r
- (jint reqCount, JNIEnv **reqList, jint *results);\r
- void (*ResumeThreadList)\r
- (jint reqCount, JNIEnv **reqList, jint *results);\r
-} JVMPI_Interface;\r
-\r
-/* type of argument passed to RequestEvent for heap dumps */\r
-typedef struct {\r
- jint heap_dump_level;\r
-} JVMPI_HeapDumpArg;\r
-\r
-/**********************************************************************\r
- * Constants and formats used in JVM Profiler Interface.\r
- **********************************************************************/\r
-/*\r
- * Event type constants.\r
- */\r
-#define JVMPI_EVENT_METHOD_ENTRY ((jint)1) \r
-#define JVMPI_EVENT_METHOD_ENTRY2 ((jint)2) \r
-#define JVMPI_EVENT_METHOD_EXIT ((jint)3) \r
-\r
-#define JVMPI_EVENT_OBJECT_ALLOC ((jint)4) \r
-#define JVMPI_EVENT_OBJECT_FREE ((jint)5) \r
-#define JVMPI_EVENT_OBJECT_MOVE ((jint)6) \r
-\r
-#define JVMPI_EVENT_COMPILED_METHOD_LOAD ((jint)7) \r
-#define JVMPI_EVENT_COMPILED_METHOD_UNLOAD ((jint)8) \r
-\r
-#define JVMPI_EVENT_INSTRUCTION_START ((jint)9) \r
-\r
-#define JVMPI_EVENT_THREAD_START ((jint)33) \r
-#define JVMPI_EVENT_THREAD_END ((jint)34) \r
-\r
-#define JVMPI_EVENT_CLASS_LOAD_HOOK ((jint)35) \r
-\r
-#define JVMPI_EVENT_HEAP_DUMP ((jint)37) \r
-#define JVMPI_EVENT_JNI_GLOBALREF_ALLOC ((jint)38) \r
-#define JVMPI_EVENT_JNI_GLOBALREF_FREE ((jint)39) \r
-#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_ALLOC ((jint)40) \r
-#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_FREE ((jint)41) \r
-#define JVMPI_EVENT_CLASS_LOAD ((jint)42) \r
-#define JVMPI_EVENT_CLASS_UNLOAD ((jint)43) \r
-#define JVMPI_EVENT_DATA_DUMP_REQUEST ((jint)44) \r
-#define JVMPI_EVENT_DATA_RESET_REQUEST ((jint)45) \r
-\r
-#define JVMPI_EVENT_JVM_INIT_DONE ((jint)46) \r
-#define JVMPI_EVENT_JVM_SHUT_DOWN ((jint)47) \r
-\r
-#define JVMPI_EVENT_ARENA_NEW ((jint)48)\r
-#define JVMPI_EVENT_ARENA_DELETE ((jint)49)\r
-\r
-#define JVMPI_EVENT_OBJECT_DUMP ((jint)50)\r
-\r
-#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTER ((jint)51)\r
-#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTERED ((jint)52)\r
-#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_EXIT ((jint)53)\r
-#define JVMPI_EVENT_MONITOR_CONTENDED_ENTER ((jint)54)\r
-#define JVMPI_EVENT_MONITOR_CONTENDED_ENTERED ((jint)55)\r
-#define JVMPI_EVENT_MONITOR_CONTENDED_EXIT ((jint)56)\r
-#define JVMPI_EVENT_MONITOR_WAIT ((jint)57)\r
-#define JVMPI_EVENT_MONITOR_WAITED ((jint)58)\r
-#define JVMPI_EVENT_MONITOR_DUMP ((jint)59)\r
-\r
-#define JVMPI_EVENT_GC_START ((jint)60)\r
-#define JVMPI_EVENT_GC_FINISH ((jint)61)\r
-\r
-#define JVMPI_MAX_EVENT_TYPE_VAL ((jint)61)\r
-\r
-/* old definitions, to be removed */\r
-#define JVMPI_EVENT_LOAD_COMPILED_METHOD ((jint)7) \r
-#define JVMPI_EVENT_UNLOAD_COMPILED_METHOD ((jint)8) \r
-#define JVMPI_EVENT_NEW_ARENA ((jint)48)\r
-#define JVMPI_EVENT_DELETE_ARENA ((jint)49)\r
-#define JVMPI_EVENT_DUMP_DATA_REQUEST ((jint)44) \r
-#define JVMPI_EVENT_RESET_DATA_REQUEST ((jint)45) \r
-#define JVMPI_EVENT_OBJ_ALLOC ((jint)4) \r
-#define JVMPI_EVENT_OBJ_FREE ((jint)5) \r
-#define JVMPI_EVENT_OBJ_MOVE ((jint)6) \r
-\r
-#define JVMPI_REQUESTED_EVENT ((jint)0x10000000)\r
-\r
-\r
- \r
-/* \r
- * enabling/disabling event notification.\r
- */\r
-/* results */\r
-#define JVMPI_SUCCESS ((jint)0)\r
-#define JVMPI_NOT_AVAILABLE ((jint)1)\r
-#define JVMPI_FAIL ((jint)-1)\r
-\r
-/*\r
- * Thread status\r
- */\r
-enum {\r
- JVMPI_THREAD_RUNNABLE = 1,\r
- JVMPI_THREAD_MONITOR_WAIT,\r
- JVMPI_THREAD_CONDVAR_WAIT\r
-};\r
-\r
-#define JVMPI_THREAD_SUSPENDED 0x8000\r
-#define JVMPI_THREAD_INTERRUPTED 0x4000\r
-\r
-/*\r
- * Thread priority\r
- */\r
-#define JVMPI_MINIMUM_PRIORITY 1\r
-#define JVMPI_MAXIMUM_PRIORITY 10\r
-#define JVMPI_NORMAL_PRIORITY 5\r
-\r
-/*\r
- * Object type constants.\r
- */\r
-#define JVMPI_NORMAL_OBJECT ((jint)0)\r
-#define JVMPI_CLASS ((jint)2)\r
-#define JVMPI_BOOLEAN ((jint)4)\r
-#define JVMPI_CHAR ((jint)5)\r
-#define JVMPI_FLOAT ((jint)6)\r
-#define JVMPI_DOUBLE ((jint)7)\r
-#define JVMPI_BYTE ((jint)8)\r
-#define JVMPI_SHORT ((jint)9)\r
-#define JVMPI_INT ((jint)10)\r
-#define JVMPI_LONG ((jint)11) \r
-\r
-/*\r
- * Monitor dump constants.\r
- */\r
-\r
-#define JVMPI_MONITOR_JAVA 0x01\r
-#define JVMPI_MONITOR_RAW 0x02\r
-\r
-/*\r
- * Heap dump constants.\r
- */\r
-#define JVMPI_GC_ROOT_UNKNOWN 0xff\r
-#define JVMPI_GC_ROOT_JNI_GLOBAL 0x01\r
-#define JVMPI_GC_ROOT_JNI_LOCAL 0x02\r
-#define JVMPI_GC_ROOT_JAVA_FRAME 0x03\r
-#define JVMPI_GC_ROOT_NATIVE_STACK 0x04\r
-#define JVMPI_GC_ROOT_STICKY_CLASS 0x05\r
-#define JVMPI_GC_ROOT_THREAD_BLOCK 0x06\r
-#define JVMPI_GC_ROOT_MONITOR_USED 0x07\r
-#define JVMPI_GC_ROOT_THREAD_OBJ 0x08\r
-\r
-#define JVMPI_GC_CLASS_DUMP 0x20\r
-#define JVMPI_GC_INSTANCE_DUMP 0x21 \r
-#define JVMPI_GC_OBJ_ARRAY_DUMP 0x22\r
-#define JVMPI_GC_PRIM_ARRAY_DUMP 0x23\r
-\r
-/*\r
- * Dump levels\r
- */\r
-#define JVMPI_DUMP_LEVEL_0 ((jint)0)\r
-#define JVMPI_DUMP_LEVEL_1 ((jint)1)\r
-#define JVMPI_DUMP_LEVEL_2 ((jint)2)\r
-\r
-/* Types used in dumps -\r
- *\r
- * u1: 1 byte\r
- * u2: 2 bytes\r
- * u4: 4 bytes\r
- * u8: 8 bytes\r
- *\r
- * ty: u1 where:\r
- * JVMPI_CLASS: object\r
- * JVMPI_BOOLEAN: boolean\r
- * JVMPI_CHAR: char\r
- * JVMPI_FLOAT: float\r
- * JVMPI_DOUBLE: double\r
- * JVMPI_BYTE: byte\r
- * JVMPI_SHORT: short\r
- * JVMPI_INT: int\r
- * JVMPI_LONG: long\r
- *\r
- * vl: values, exact type depends on the type of the value:\r
- * JVMPI_BOOLEAN & JVMPI_BYTE: u1\r
- * JVMPI_SHORT & JVMPI_CHAR: u2\r
- * JVMPI_INT & JVMPI_FLOAT: u4\r
- * JVMPI_LONG & JVMPI_DOUBLE: u8\r
- * JVMPI_CLASS: jobjectID\r
- */\r
-\r
-/* Format of the monitor dump buffer:\r
- *\r
- * u1 monitor type\r
- *\r
- * JVMPI_MONITOR_JAVA Java monitor\r
- *\r
- * jobjectID object\r
- * JNIEnv * owner thread\r
- * u4 entry count\r
- * u4 # of threads waiting to enter\r
- * [JNIEnv *]* threads waiting to enter\r
- * u4 # of threads waiting to be notified\r
- * [JNIEnv *]* threads waiting to be notified\r
- *\r
- * JVMPI_MONITOR_RAW raw monitor\r
- *\r
- * char * name\r
- * JVMPI_RawMonitor raw monitor\r
- * JNIEnv * owner thread\r
- * u4 entry count\r
- * u4 # of threads waiting to enter\r
- * [JNIEnv *]* threads waiting to enter\r
- * u4 # of threads waiting to be notified\r
- * [JNIEnv *]* threads waiting to be notified\r
- */\r
-\r
-/* Format of the heap dump buffer depends on the dump level \r
- * specified in the JVMPI_HeapDumpArg passed to RequestEvent as arg. \r
- * The default is JVMPI_DUMP_LEVEL_2.\r
- *\r
- * JVMPI_DUMP_LEVEL_0:\r
- * \r
- * u1 object type (JVMPI_CLASS ...)\r
- * jobjectID object\r
- *\r
- * JVMPI_DUMP_LEVEL_1 and JVMPI_DUMP_LEVEL_2 use the following format: \r
- * In the case of JVMPI_DUMP_LEVEL_1 the values of primitive fields in object \r
- * instance dumps , the values of primitive statics in class dumps and the \r
- * values of primitive arrays are excluded. JVMPI_DUMP_LEVEL_2 includes the\r
- * primitive values.\r
- *\r
- * u1 record type\r
- *\r
- * JVMPI_GC_ROOT_UNKNOWN unknown root\r
- *\r
- * jobjectID object\r
- *\r
- * JVMPI_GC_ROOT_JNI_GLOBAL JNI global ref root\r
- *\r
- * jobjectID object\r
- * jobject JNI global reference\r
- *\r
- * JVMPI_GC_ROOT_JNI_LOCAL JNI local ref\r
- *\r
- * jobjectID object\r
- * JNIEnv * thread\r
- * u4 frame # in stack trace (-1 for empty)\r
- *\r
- * JVMPI_GC_ROOT_JAVA_FRAME Java stack frame\r
- *\r
- * jobjectID object\r
- * JNIEnv * thread\r
- * u4 frame # in stack trace (-1 for empty)\r
- *\r
- * JVMPI_GC_ROOT_NATIVE_STACK Native stack\r
- *\r
- * jobjectID object\r
- * JNIEnv * thread\r
- *\r
- * JVMPI_GC_ROOT_STICKY_CLASS System class\r
- *\r
- * jobjectID class object\r
- *\r
- * JVMPI_GC_ROOT_THREAD_BLOCK Reference from thread block\r
- *\r
- * jobjectID thread object\r
- * JNIEnv * thread\r
- *\r
- * JVMPI_GC_ROOT_MONITOR_USED Busy monitor\r
- *\r
- * jobjectID object\r
- *\r
- * JVMPI_GC_CLASS_DUMP dump of a class object\r
- *\r
- * jobjectID class\r
- * jobjectID super\r
- * jobjectID class loader\r
- * jobjectID signers\r
- * jobjectID protection domain\r
- * jobjectID class name\r
- * void * reserved\r
- *\r
- * u4 instance size (in bytes)\r
- *\r
- * [jobjectID]* interfaces\r
- *\r
- * u2 size of constant pool\r
- * [u2, constant pool index,\r
- * ty, type, \r
- * vl]* value\r
- *\r
- * [vl]* static field values\r
- *\r
- * JVMPI_GC_INSTANCE_DUMP dump of a normal object\r
- *\r
- * jobjectID object\r
- * jobjectID class\r
- * u4 number of bytes that follow\r
- * [vl]* instance field values (class, followed\r
- * by super, super's super ...)\r
- *\r
- * JVMPI_GC_OBJ_ARRAY_DUMP dump of an object array\r
- *\r
- * jobjectID array object\r
- * u4 number of elements\r
- * jobjectID element class\r
- * [jobjectID]* elements\r
- *\r
- * JVMPI_GC_PRIM_ARRAY_DUMP dump of a primitive array\r
- *\r
- * jobjectID array object\r
- * u4 number of elements\r
- * ty element type\r
- * [vl]* elements\r
- *\r
- */\r
-\r
-/* Format of the dump received in JVMPI_EVENT_OBJECT_DUMP:\r
- * All the records have JVMPI_DUMP_LEVEL_2 information.\r
- *\r
- * u1 record type\r
- *\r
- * followed by a:\r
- *\r
- * JVMPI_GC_CLASS_DUMP,\r
- * JVMPI_GC_INSTANCE_DUMP,\r
- * JVMPI_GC_OBJ_ARRAY_DUMP, or\r
- * JVMPI_GC_PRIM_ARRAY_DUMP record.\r
- */\r
-\r
-#endif /* !_JAVASOFT_JVMPI_H_ */\r