The generated jvmti.h file uses a leading underscore for struct/union declarations. E.g.,
struct _jvmtiTimerInfo;
typedef struct _jvmtiTimerInfo jvmtiTimerInfo;
It's unclear why this was done (probably to work around really old C compilers that didn't like "typedef struct _jvmtiTimerInfo jvmtiTimerInfo;").
However, this style breaks encapsulation when making a forward declaration of the jvmtiTimerInfo type in a source file unrelated to jvmti. I.e., one must assume the knowledge of a non-public type "struct _jvmtiTimerInfo".
We should remove the leading underscore. Hence, we can make forward declarations like this in C++ source code:
struct jvmtiTimerInfo;
I.e., "we know that there is a public struct named jvmtiTimerInfo and we don't care what its contents are".