问一个JNI的难题?!

leehq 2006-09-25 03:31:40
在C++程序里调用"JNI_CreateJavaVM"函数是不是只能创建一个虚拟机?
因为我第二次调用"JNI_CreateJavaVM"时它返回-1。

我看了sun的文档,里面说并不是所有厂商的Java虚拟机都可以在同一个进程中创建多个,但是连sun自家的都不行吗?
...全文
283 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
leehq 2006-09-30
  • 打赏
  • 举报
回复
算了,结贴!
maquan 2006-09-29
  • 打赏
  • 举报
回复
看来就是只能创建一个 JVM 了,既然 Sun 的 JDK 就是这么做的~~

我也写了个 C 程序试过了,没什么新发现 :(
leehq 2006-09-28
  • 打赏
  • 举报
回复
maquan('ma:kju)
意思是说只能创建一个jvm了...
ykzhujiang 2006-09-28
  • 打赏
  • 举报
回复
学习。。。
maquan 2006-09-28
  • 打赏
  • 举报
回复
查了一下 JDK 的 source code(我用的是 jdk-1_5_0-src-scsl),在 jni.cpp 里看到这样一段,hehe~~

_JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, void *args) {
// At the moment it's only possible to have one Java VM,
// since some of the runtime state is in global variables.

// We cannot use our mutex locks here, since they only work on
// Threads. We do an atomic compare and exchange to ensure only
// one thread can call this method at a time
if (Atomic::add(1, &num_vm_created) > 1) {
return JNI_ERR;
}
if (Atomic::xchg(1, &vm_created) == 1) {
Atomic::dec(&num_vm_created);
return JNI_ERR;
}

assert(vm_created == 1, "vm_created is true during the creation");
……
healer_kx 2006-09-28
  • 打赏
  • 举报
回复
在不同的操作系统中的线程,进程的概念是存在差别的。
Win32上java.exe就是一个虚拟机,是一个进程。里面可能有多个ClassLoader加载多个App。
leehq 2006-09-28
  • 打赏
  • 举报
回复
?
leehq 2006-09-28
  • 打赏
  • 举报
回复
?
Yanbin_Q 2006-09-27
  • 打赏
  • 举报
回复
我还真没试过创建两个JVM,一个倒是做过,真要回家试试看。
maquan 2006-09-27
  • 打赏
  • 举报
回复
en, 我在 Sun 的文档里没有看到明确说“不行”的地方,感觉应该是行的~~

至于楼上兄弟说的“必要性”,我觉得有些情况下还是需要的,比如为了隔离。

楼主是在同一个线程中调用 JNI_CreateJavaVM() 的吗?如果是的话,不妨试试在*不同*的线程中调用。
leehq 2006-09-27
  • 打赏
  • 举报
回复
maquan('ma:kju)
我是在两个线程分别调用"JNI_CreateJavaVM"的,而且调用的时间也不同。
iihero 2006-09-26
  • 打赏
  • 举报
回复
Windows上好像确实不行。
也许Unix/Linux下可以。但是确实没有必要这么做。
Preamble 2006-09-26
  • 打赏
  • 举报
回复
不可以,但我也不知道为什么。而且好像没有那个必要创建2个虚拟机。就像加载
2次jvm.dll一样没用。
leehq 2006-09-26
  • 打赏
  • 举报
回复
没有高手吗?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧