首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程JNI在负载下导致段错误

多线程JNI在负载下导致段错误
EN

Stack Overflow用户
提问于 2012-05-01 20:09:51
回答 1查看 421关注 0票数 0

我将一个JVM嵌入到我的die服务器中,它有4个永不消亡的工作线程。以下代码在4个工作进程中的任何一个内的每个http请求上运行:

代码语言:javascript
复制
// normally I would do URL routing here first, but this is just a JNI test now 
jclass cls;
jmethodID method;
jobjectArray args;
jclass stringClass;
jstring jstr;

(*jvm)->AttachCurrentThread (jvm, &env, NULL);

cls = (*env)->FindClass(env, "HelloWorldClass");

method = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V");

jstr = (*env)->NewStringUTF(env, "Hello world!");

stringClass = (*env)->FindClass(env, "java/lang/String");
args = (*env)->NewObjectArray(env, 1, stringClass, jstr);

(*env)->CallStaticVoidMethod(env, cls, method, args);

当我使用调试器单步执行时,它可以工作。但是,当我用weighttp基准测试对它进行一些加载时,它会随机地在FindClass()线路或CallSTaticVoidMethod()线路上分段。可能的问题是什么?我通读了很多文档,我不认为我需要在这里锁定或释放任何东西。

这几乎是最基本的JNI代码,取自官方文档:http://java.sun.com/docs/books/jni/html/invoke.html

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-01 20:50:29

看起来我已经将JNIEnv*放到了全局作用域中。虽然这本身不应该造成问题,因为它在使用它的每个线程中都会被覆盖,但JNI似乎希望/需要在每次使用它时在内部释放它。API设计的奇观!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10397457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档