MethodHandles::verify_ref_kind function defined in following modules under '#ifdef ASSERT', i.e. exits only in debug build:
hotspot/src/closed/cpu/arm/vm/methodHandles_arm.cpp
hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp
hotspot/src/cpu/x86/vm/methodHandles_x86.cpp
hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp
hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp
MethodHandles::verify_ref_kind contains memory leak. Here is a code from src/cpu/x86/vm/methodHandles_x86.cpp module(other are similar):
void MethodHandles::verify_ref_kind(MacroAssembler* _masm, int ref_kind, Register member_reg, Register temp) {
...
{ char* buf = NEW_C_HEAP_ARRAY(char, 100, mtInternal);
jio_snprintf(buf, 100, "verify_ref_kind expected %x", ref_kind);
if (ref_kind == JVM_REF_invokeVirtual ||
ref_kind == JVM_REF_invokeSpecial)
// could do this for all ref_kinds, but would explode assembly code size
trace_method_handle(_masm, buf);
__ STOP(buf);
}
...
}
Memory for 'buf' is allocated by NEW_C_HEAP_ARRAY but not freed after '__ STOP(buf);'.
hotspot/src/closed/cpu/arm/vm/methodHandles_arm.cpp
hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp
hotspot/src/cpu/x86/vm/methodHandles_x86.cpp
hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp
hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp
MethodHandles::verify_ref_kind contains memory leak. Here is a code from src/cpu/x86/vm/methodHandles_x86.cpp module(other are similar):
void MethodHandles::verify_ref_kind(MacroAssembler* _masm, int ref_kind, Register member_reg, Register temp) {
...
{ char* buf = NEW_C_HEAP_ARRAY(char, 100, mtInternal);
jio_snprintf(buf, 100, "verify_ref_kind expected %x", ref_kind);
if (ref_kind == JVM_REF_invokeVirtual ||
ref_kind == JVM_REF_invokeSpecial)
// could do this for all ref_kinds, but would explode assembly code size
trace_method_handle(_masm, buf);
__ STOP(buf);
}
...
}
Memory for 'buf' is allocated by NEW_C_HEAP_ARRAY but not freed after '__ STOP(buf);'.