JVM方法调用
JVM方法调用
以下内容基本上是对于[1]的整理和一些补充。
下面的内容以x86为例,其他平台下会有所不同,可能有一些内容暂时还不好理解,不过配合其他内容多看几遍应该还是不成问题的。
首先来看看解释器栈的结构和编译方法栈的结构,先将图放在这里方便用来参考。
和解释器栈布局有关的文件是src/hotspot/cpu/x86/frame_x86.hpp
,里面规定了每个解释器栈帧中的固定槽位中放置了那些信息,栈帧中有两个非固定的部分,一个是monitor部分,另外一个是运算数栈部分。
至于JNI的栈帧,就是c++栈的结构,所以取决于系统的ABI,所以从JNI到java方法的调用中间有转化,最常见的一个JNI调用java方法就是对main方法的调用。先把栈的布局放在这里,下面再来说如何进行的调用吧。
参考资料
[1] 鸠摩(马智) - 博客园