我想在我的Android应用程序中找出问题。此问题在代码的本机层的垃圾回收过程中导致崩溃。我会解释一下自己。单个java线程如何一次执行多个本地方法?
我的应用程序仅包含java源代码控制GUI元素等,以及管理应用程序渲染和其他性能关键部分的本机库。它具有用于渲染的GLSurfaceView。
java层需要能够访问和实例化本机对象,所以这些通过Swig公开给Java。 Swig所做的是在每个包装类(Java)中,它会生成一个finalize方法,该方法将调用本机删除操作符。
考虑以下伪代码:
在C++:
class MyClass {
public:
MyClass() {}
~MyClass()
{
print("deleting MyClass instance");
print("doing 1");
do1();
print("doing 2");
do2();
print("doing 3");
do3();
print("instance deleted");
}
};
这是伪代码,这意味着如“打印”表示打印在Android的logcat的,我只是保持它简直是愚蠢的; )。
让我感到困惑的是,当垃圾收集器运行并在某些情况下调用析构函数时,我可以在多个析构函数之间找到交织输出(就好像它们被同时删除一样)。在这个例子情况下,它可能是:
deleting MyClass instance
doing 1
deleting MyClass instance
doing2
doing1
doing2
deleting MyClass instance
doing3
doing3
instance deleted
doing1
doing2
instance deleted
doing3
instance deleted
而在同一时间的logcat中明确指出,这些消息在同一个线程(终结器线程)发起。
因此,我的问题:“一个线程如何能同时执行多个本地调用?”
见http://stackoverflow.com/questions/11052064/jvm-garbage-collection – Samhain
@Samhain,这里并不适用,因为这发生在Dalvik虚拟机,而不是JVM –
感谢@TassosBassoukos,我想的太多了这个问题并没有解释这个问题。 –