如果我们尝试将本机线程永久地附加到DVM(JVM)会有什么后果?

Sum*_*man 11 java java-native-interface multithreading android android-ndk

将本机线程永久地附加到JVM(AttachCurrentThread)是否可行(或者)是否在需要时(调用java函数)更好地附加并在工作完成后立即分离

我用上面的案例写了一个示例本机应用程序,没有发现任何区别.但是通过谷歌搜索,模糊地我才知道,当连接到JVM时,JVM的线程调度负责调度,否则OS将调度本机线程(如果没有附加).这是真的?

分离以前连接过的任何线程都很重要; 否则,当您调用DestroyJavaVM时,程序不会退出.- http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniref.html#attach

会有任何性能问题吗?
如果有人知道,请告诉我,这是我的重要设计方面.

感谢和问候.

Yve*_*tin 4

一般来说,主要的性能成本是操作系统级别的线程创建。线程要么本地创建,然后附加,要么直接java.lang.Thread从 Java API 创建。

如果重复使用相同的本机线程,性能会很好。顺便说一句,不要创建数十个本机线程。

JVM本身不调度线程。它可能会由于垃圾收集等各种原因迫使它们处于睡眠状态。在这种特定情况下,它必须在收集之前等待来自本机线程的 JNI 调用。因此,您必须避免在没有 JNI 调用的情况下执行太长的代码,以保持 VM 堆消耗较低。

此外,在分离本机线程之前您必须小心调用DeleteLocalRef,否则您的虚拟机将泄漏内存。