为什么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虚拟还有很多东西,如类装载器、安全性、垃圾回收等.......
分享到:
相关推荐
然后javac(不用ide,这样会更好一点)。Javac是编译。变成中间代码,class文件。 涉及 编译原理里面的解释和编译。 2.1. 编译和解释: 2.1.1.编译型语言在编译过程中生成目标平台的指令,解释型语言在运行...
不了解虚拟机的内部原理(或者叫规范更严谨一点)是肯定不行的,这里推荐一本好书《深入Java虚拟机 (第二版)》(Bill Venners著,曹晓刚 蒋靖 译,实际上本文正是作者阅读本书之后,对Java虚拟机的个人理解阐述)。...
作为一名优秀的 Java 开发程序员,以及想那些想要学习 Java 更深层一点的知识的同学,对 JVM 的熟悉与熟练使用是必不可缺的核心技能了,也是每个 Java 程序员应该要做到的。 深入学习 JVM 可以有助于我们掌握 Java ...
java利用Java虚拟机运行字节码,无论是在Windows、Linux还是MacOS等其它平台对Java程序进行编译,编译后的程序可在其它平台运行。 3. Java为解释型语言,编译器把Java代码编译成平台无关的中间代码,然后在JVM上解释...
首先从概念上理解一下吧,JDK(Java Development Kit)简单理解是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也是常常听到Java虚拟机。JDK是面向开发者的,JRE是...
Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关。 2. 安全性 Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,...
相信大家都知道jdk的bin下有各种java程序需要用到的命令,与jre的bin目录最明显的区别就是jdk下才有javac,这一点很好理解,因为 jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才...
长期以来,多线程问题颇为受到面试官的... 在各种各样的线程中,Java虚拟机必须实现一个有优先权的、基于优先级的调度程序。这意味着Java程序中的每一个线程被分配到一定的优先权,使用定义好的范围内的一个正整数表
笔记大都基于视频教程的学习记录,有的地方是对视频里老师原话的复述,有的地方加上了自己的一点理解,有的内容来源于对网上博文干货的整理。若存在错误,还请各位大侠指出哈。 另外,目前只学了 Java 基础、JavaWeb...
然而,我大学毕业的时候,连linux的虚拟机都没装过,更别提系统熟不熟悉了。虽然我了解一点这个系统可以完全通过命令来操作。后来工作了,有时候写点代码,svn提交上去,服务器是Linux的,自己也是在windows上跑跑...
此外,在Xerox PARC工作,那里有许多语言和系统上的专家,我不得不强迫自己去理解Tcl/Tk的长处和弱点。我的许多同事都在他们的项目中采用了Tcl和Tk,但是他们也很快指出了它的缺点。因此,我就总结了一套编程技巧以...
看完了前面几段,我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对象、中间语言什么的也不是什么新玩意儿,非Sun独创,有文为证:华山论剑:C#对Java。另外他对我上一集中说...