Java虚拟机中native方法和Java方法互相调用的机制如何实现?

sqsavagepointer 2005-09-12 02:38:52
假设要用Java语言实现一个虚拟机,现在讨论有关程序运行模块。

在Java虚拟机中,是当从Java方法中调用native方法是较易实现的;但虚拟机如何识别出一条线程在native方法中调用了一个Java方法?

例如,在Thread类中,start()方法是Java方法;run()方法也是Java方法,start0()方法是私有的native方法。这3个方法的调用次序如下:

start()——>start0()——>run()

由于start0()方法是native方法,无法跟踪其运行代码,那么如何得知它会在什么时候调用run()方法呢?
...全文
373 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
SimonDW 2005-09-21
  • 打赏
  • 举报
回复
通过上下文知道呗。

看来楼主没有用过jni
每个native方法的C/C++实现的函数都有一个JNIEnv的参数传进来.
native程序可以通过这个参数调用java的类的方法。
nwpulipeng 2005-09-21
  • 打赏
  • 举报
回复
humanity 2005-09-20
  • 打赏
  • 举报
回复
楼上这个 如果是一个类内部呢(就像楼主说得那样)?

新开一个 JVM 不是不能共享状态?
congliu 2005-09-19
  • 打赏
  • 举报
回复
jvm不知道,只是在启动另外一个jvm继续运行
sqsavagepointer 2005-09-16
  • 打赏
  • 举报
回复
我知道Java方法和Native方法的相互调用没问题。

我是想问:Java虚拟机在执行一个Native方法时,该Native方法又调用了一个Java方法时,java虚拟机是怎么样知道的?
dlxu 2005-09-14
  • 打赏
  • 举报
回复
Java方法和Native方法在虚拟机中都是相同的,只不过一个是Java实现的,一个是操作系统底层实现的,所以互相调用应该没有问题
humanity 2005-09-14
  • 打赏
  • 举报
回复
不知道,占位子
findfeels 2005-09-14
  • 打赏
  • 举报
回复
不明白;学习下
kingdoom 2005-09-13
  • 打赏
  • 举报
回复
帮顶
sqsavagepointer 2005-09-12
  • 打赏
  • 举报
回复
没人?自己顶一下
  • 打赏
  • 举报
回复
帮顶
一、什么是JVM  JVM是Java Virtual Machine(Java虚拟)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算,是通过在实际的计算上仿真模拟各种计算功能来实现的。Java虚拟包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的器指令执行。  Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟在执行字节码时,把字节码解释成具体平台上的器指令执行。这就是Java的能够“一次编译,到处运行”的原因。二、JVM的组成我们先把JVM这个虚拟画出来,如下图所示:从这张图我们可以看出,JVM是运行在操作系统之上的,它与硬件没有直接的交互,我们再来看JVM由哪些部分组成,如下图所示:

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧