我发现自己需要从任意本机回调到JVM 线程可能是也可能不是长寿的。这很容易打电话 每个Java方法调用之前的AttachCurrentThread 如果线程已经存在,则假设它是一个(大概是快速的)无操作 附件,但我发现自己想知道JVM对附件的作用 当他们在没有土地的某个地方离开的时候 正式脱离。或者换句话说,这将是一个 问题?如果是这样,那么我发现自己想知道它的开销 每个Java方法调用的附加/分离。理想情况下每个 线程只会在启动时注册自己,并在关闭时分离 但同样,我正在编写必须可以从任意调用的代码 运行代码的线程不知道它在Android内部运行, 所以在这种情况下这不是一个现实的选择。
对此事的任何想法?
答案 0 :(得分:2)
我发现自己想知道当JVM在原生土地的某个地方离开而没有被正式分离时,JVM对附加的本机线程做了什么。
当所有非守护程序线程都退出时,常规VM将关闭。在不分离的情况下附加线程意味着VM无法退出,必须先等待线程分离。这只是VM的一般情况。在Android中它应该不是问题,因为应用程序并没有真正“退出”。 Source
但强烈建议使用分离线程进行正确的内存管理(请参阅official recommendation)。
我正在编写必须可以从运行代码的任意线程调用的代码,这些代码不知道它在Android内部运行,所以在这种情况下这不是一个现实的选择。
实际上,自分离线程的实现非常简单。将“析构函数”引用传递给pthread_key_create(destKey_, threadDestructor);
并在此“析构函数”中调用JNI方法cached_jvm->DetachCurrentThread();
。
希望有所帮助!