2 u012462015 u012462015 于 2016.03.18 10:16 提问

用Java写的JVM,在没有JVM的机器上怎么运行。

我们知道,通常来说,一种语言的编译器和连接器的编写是无关乎这种语言本身的,因为最终只要这种编译器或连接器是以机器能读懂得二进制的形式存在的就行,机器便能运行它。
同样,我们也知道用Java编写的程序不是直接和硬件打交道,甚至不是和操作系统打交道,而是和JVM打交道,只有在装有JVM的机器上才能运行。那么此刻问题来了,本身是用Java写的JVM,他们是如何在没有JVM的机器上运行的呢?这就形成了一个悖论了。本人初涉Java,还望告诉能指点一二,谢谢!!!

2个回答

cxsmarkchan
cxsmarkchan   2016.03.18 10:22

严格来说,JVM不是Java程序,也不满足Java程序一次编译,多处运行的条件。例如,在Linux下的JVM是不能在windows下运行的。

cxsmarkchan
cxsmarkchan 回复CSUjuniorstu: 你的想法是正确的,纯粹的Java程序,在没有JVM的机器上肯定无法运行,需要一些折中的办法。除了Java和C联合编程的方式,还有一种思路是把Java字节码(在一台有JVM的机器上)翻译成机器码,再拿到没有JVM的机器上运行,这样就不用依赖JVM了。但是,翻译成机器码之后,就只能在相应的机器上运行了,不能跨平台。
一年多之前 回复
cxsmarkchan
cxsmarkchan 回复CSUjuniorstu: 这一小部分用C实现的部分是很重要的,可以理解为:用C实现一小部分解释程序,再用这一小部分程序来解释JVM中其余的Java代码。这种思想在编译器中也有(称为“自举”),例如C编译器的一种实现方法是:用汇编语言写一个能编译部分C语法的编译器,然后再基于这一小部分语法,编程实现一个支持完整C语法的编译器。这比纯粹用汇编语言写C编译器简单一些。
一年多之前 回复
u012462015
u012462015 但是我在晚上看到很多人都说有的JVM是用纯Java实现的,比如这篇知乎的159楼说到“Oracle/Sun Maxine VM - VM自身是用纯Java实现的,包括VM核心、JIT编译器和GC等都是;有一小块启动程序用C实现”(链接:http://www.zhihu.com/question/20163831)
一年多之前 回复
ligang7560
ligang7560   2016.03.18 15:27

JVM不是用java实现的,是基于C实现的,包括JDK很多方法都是C实现的, 去看下java的native和jni 你就明白了

u012462015
u012462015 我知道很多JVM都是用C/C++实现的,但是也有用Java实现的,我问的就是那些用JVM实现的是怎么回事
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!