假设要用Java语言实现一个虚拟机,现在讨论有关程序运行模块。在Java虚拟机中,是当从Java方法中调用native方法是较易实现的;但虚拟机如何识别出一条线程在native方法中调用了一个Java方法?例如,在Thread类中,start()方法是Java方法;run()方法也是Java方法,start0()方法是私有的native方法。这3个方法的调用次序如下:start()——>start0()——>run()由于start0()方法是native方法,无法跟踪其运行代码,那么如何得知它会在什么时候调用run()方法呢?
每个native方法的C/C++实现的函数都有一个JNIEnv的参数传进来.
native程序可以通过这个参数调用java的类的方法。