gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:00:34 24 4
gpt4 key购买 nike

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

// 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

最佳答案

看起来我已将 JNIEnv* 放入全局范围。虽然这本身不应该引起问题,因为它在使用它的每个线程中都会被覆盖,但看起来好像 JNI 想要/需要在每次使用它时在内部释放它。 API 设计的奇迹!

关于c - 多线程 JNI 在负载下导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com