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

解决方案 »

  1.   

    Java方法和Native方法在虚拟机中都是相同的,只不过一个是Java实现的,一个是操作系统底层实现的,所以互相调用应该没有问题
      

  2.   

    我知道Java方法和Native方法的相互调用没问题。我是想问:Java虚拟机在执行一个Native方法时,该Native方法又调用了一个Java方法时,java虚拟机是怎么样知道的?
      

  3.   

    jvm不知道,只是在启动另外一个jvm继续运行
      

  4.   

    楼上这个 如果是一个类内部呢(就像楼主说得那样)?新开一个 JVM 不是不能共享状态?
      

  5.   

    通过上下文知道呗。看来楼主没有用过jni
    每个native方法的C/C++实现的函数都有一个JNIEnv的参数传进来.
    native程序可以通过这个参数调用java的类的方法。