当前位置: 首页 > 知识库问答 >
问题:

JavaJNI方法id缓存

云曦之
2023-03-14

我想跨调用缓存方法ID。为此,我得到方法ID:

// Put static to clarify it's saved across calls.
static jmethodID method = env->GetMethodID(class_HelloWorld, name, signature);

我的问题是:我是否需要使用NewGlobalRef创建全局引用,或者可以从本地引用获取并保存方法ID(我使用FindClass获取class\u HelloWorld),而不需要全局引用类元数据?

共有1个答案

韩靖琪
2023-03-14

如果从中获取methodID的类没有更改,则可以重新使用methodID。它不像jclass或jobject需要缓存为GlobalRef:它实际上只是一个整数。

 类似资料:
  • 我有一个简单的类在Java: 在C中,我执行以下JNI调用: 如果一个程序调用静态方法c_call_function(),则可以。 但是如果一个多线程程序调用c_call_function(),当传递env行时,它会给我以下消息- 访问违规在0x0000006FC77154读取到0x0000000000000000 如果程序是多线程的,则使用相同的JNIEnv变量。但我也尝试通过AttachCur

  • 我有一个Java类: 这是我的JNI代码: FindClass返回的不是NULL,好的。但是GetmetodID总是返回零。我试图使默认的构造函数没有args,并使用"()V"签名,但是GetmetodID返回NULL。 怎么了?

  • 我想缓存重方法的结果,但我出于某种原因,它不会存储在缓存中。 我尝试过使用Spring缓存,但它只在缓存整个api时起作用,我只需要缓存其中的一部分。 请求跟踪 启用缓存

  • 我看了IBM 要访问Java对象的字段并调用它们的方法,本机代码必须调用FindClass()、GetFieldID()、GetMachodId()和GetStaticMachodID()。在GetFieldID()、GetMachodID()和GetStaticMachodID()的情况下,为给定类返回的ID在JVM进程的生命周期内不会改变。但是获取字段或方法的调用可能需要在JVM中进行大量工作

  • 问题内容: 我在IBM上读到 要访问Java对象的字段并调用其方法,本机代码必须调用FindClass(),GetFieldID(),GetMethodId()和GetStaticMethodID()。对于GetFieldID(),GetMethodID()和GetStaticMethodID(),对于给定类返回的ID在JVM进程的生存期内不会更改。但是,获取字段或方法的调用可能需要在JVM中进行

  • 我有一个使用Spring Boot的简单应用程序。我希望允许使用JSR107-JCache进行方法缓存。在教程的帮助下,我编写了以下代码: 使用此POM文件 (依赖“spring-boot-starter-web”用于调用getCountry方法的简单REST服务) 一切都像文档所说的那样工作——方法只调用一次。 现在我想在WildFly 10应用服务器上试用它 我修改了pom文件: 排除tomc