JAVA的平台无关性
谈谈Java的“一次编译,到处运行”
Java相关重要特性
-
跨平台/可移植性
Java 的核心优势。Java在设计时就很注重移植和跨平台性。比如:Java的int永远都是32位。不需要为不同的平台开发不同的程序,而是只开发一套应用,就可以运行在不同的平台上。 -
解释执行
解释执行的含义是,Java程序编译之后,只是生成了class文件,成为字节码,并不是机器码。在执行时,JVM中的解释器,会根据当前平台的特征,对class文件进行解释,生成符合当前规范的机器码,得以运行。 -
面向对象
Java语言是一门面向对象语言,具备面向对象语言三大特征:封装、继承、多态。 -
自动垃圾回收
程序员无权回收内存。系统级线程跟踪每一个存储空间的分配情况,在JVM空闲周期,垃圾收集线程检查,释放内存。 -
健壮性
Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。即使Java程序也可能有错误。
如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理。 -
支持多线程编程
多线程的使用可以带来更好的交互响应和实时行为。 Java多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。 -
Java 还具有 高性能、分布式 等特性。
“一次编译,到处运行”的实现
-
Java编译程序并不直接将Java源代码编译为相依于计算机平台的0、1序列,而是将其编译为字节码(* *.class)。
-
想要执行字节码文件,目标平台必须要安装JVM(java虚拟机),JVM会将字节码翻译为相依与平台的计算机指令,即:0、1序列。(不同平台要安装专属该平台的JVM)。
-
JVM 相当一个翻译员,将字节码文件(* *.class)翻译成程序运行的平台能看懂的0、1序列,JVM 帮助我们编写的 Java 程序实现“一次编译到处运行”的跨平台目的。
-
即,Java 程序跨平台性好的根本原因是 JVM 的存在。
对Java程序而言,只认识一种操作系统,这个系统就是JVM,字节码文件(扩展名为.class的文档)就是JVM的可执行文件。
Java 的执行过程
- 最开始,我们编写的 Java 代码是 **.java 文件
- 在编译后(javac 命令)后,从 * *.java 文件会生成一个新的 Java 字节码文(##.class)
- JVM 会执行前面生成的字节码文件(##.class),并把字节码文件转化为 机器指令
- 机器指令可以直接在 CPU 上运行,也就是最终的程序运行