论坛首页 Java企业应用论坛

对JAVA虚拟机的一点理解

浏览 1883 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-12  

为什么JAVA跨平台 

对于C/C++程序来说,编译后生成与特定操作系统平台相关字节码文件,由于与特定平台相关,所以不能在另一个操作系统平台运行,而对于JAVA程序来说,编译后生成是与JAVA虚拟机这个平台相关的class文件,与操作系统无关,由于生成后的字节码文件只与JAVA虚拟机相关与操作系统无关,所以在安装了JAVA虚拟机的操作系统上都能运行。 


JAVA跨平台不是绝对的 

先说下JAVA程序的运行原理,JAVA程序被编译成class文件后就可以被JAVA虚拟执行,JAVA虚拟对class文件进行解释后再调用本地方法,本地方法是与操作系统相关的,由于不同操作系统平台安装有不同类型的JAVA虚拟机,如windows系统安装window版的JAVA虚拟机,linux系统安装linux版的JAVA虚拟机,所以当JAVA程序在windows系统下运行时调用的是windows平台的本地方法,在linux下运行时调用的是linux平台对应的本地方法。至于调用怎样的本地方法根本不用我们操心,这是JAVA虚拟机干的事,理它是在windows平台还是在linux平台,我把只要把JAVA程序写好就行了,剩下的工作JAVA虚拟机会帮我们搞定。 

但是当JAVA程序直接调用本地方法,JAVA程序就与操作系统相关了,这样的JAVA程序是不能做到一次编写,到处运行的。也就是说你所编写的程序不只调用了JAVA API,而且还调用了操作系统的本地方法。如果你在自己的JAVA程序里面直接调用了windows API,那么这样的程序就不能在linux下运行了。关于JAVA程序如何调用windows API搜索下就能找到答案,这里就不多说了。 


以上只是个人对JAVA虚拟机的一点理解,关于JAVA虚拟还有很多东西,如类装载器、安全性、垃圾回收等....... 

   发表时间:2011-05-12  
好,不错,让我这个初学者对JAVA虚拟机有了比较深一层的理解
0 请登录后投票
   发表时间:2011-05-13  
调用 c/c++写的,可以用Jco
如果你一定要在linux下调用windows下的api,那你编写的时候,就应该知道,linux下没有windows api,相反也一样
问题总有解决的方法,就是看你怎么解决
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics