RFR: 8367719: Refactor JNI code that uses class_to_verify_considering_redefinition() [v2]

Ioi Lam iklam at openjdk.org
Fri Sep 19 03:10:32 UTC 2025


On Tue, 16 Sep 2025 06:41:52 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> Ioi Lam has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since the last revision:
>> 
>>  - @coleenp and @dholmes-ora comments -- simplify implementation; fixed code formatting
>>  - Merge branch 'master' into 8367719-refactor-jni-code-that-uses-class_to_verify_considering_redefinition
>>  - 8367719: Refactor JNI code that uses class_to_verify_considering_redefinition()
>
> Looks good. Just some minor nits.
> 
> Thanks

Thanks for the comments @dholmes-ora and @coleenp. I've made the changes you suggested.

> I sort of think there's no need for the Klass* version of get_class_considering_redefinition since its callers seem to really want an InstanceKlass. Since it's jvm.cpp, you can probably verify that it's never Klass in these callers.

I think it's valid for some of the functions to be called with a non-instance klass, so I use the `get_instance_klass_considering_redefinition()` version only when the original code was doing an `InstanceKlass::cast()`. 

For functions like this one, I am keeping the type checks in the original code:


JVM_ENTRY(jint, JVM_GetClassMethodsCount(JNIEnv *env, jclass cls))
  Klass* k = get_klass_considering_redefinition(cls, thread);
  return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->methods()->length();
JVM_END


I did remove the `Klass*` version from jvmThreadState.hpp.

I also updated the comments to reflect the new naming.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/27303#issuecomment-3310354049


More information about the serviceability-dev mailing list