刚刚接触jvm的知识,还请知道的朋友解答一下。
前提:假设我现在要用c实现一个算整数加法的jvm。(iadd指令)
我举个栗子,比如我操作数栈现在有1和2两个数,那么
【1和2出栈】
【相加为3】
【将3入栈】
这个三个过程,是谁做的?
(1)C语言做的,实现的代码类似这样:
int a = pop();
int b = pop(); // 2个操作数出栈
int c = a + b; // 相加结果,相加的操作是c来做的
push(c); // 结果入栈
(2)cpu做的,jvm把iadd这个指令,直接翻译称为cpu认识的机器码,然后具体的相加操作是由cpu直接执行的,与任何语言都无关。
这个问题是我目前在学习过程中未能理解的。
如果是情况1,那么我可不可以理解为,java语言实际上就是对c/c++的一种高级“封装”?所有的java语法,都可以认为是c/c++的语法糖?所有java的操作(加减乘除之类的)都要委托给c/c++去实现?
如果是情况2,那有没有资料说明一下字节码指令和机器码的转换关系?
如果以上2种情况都不对,那到底是什么样的呢?