了解什么是平台
平台就是CPU处理器和操作系统的整体称呼
CPU处理器
如果将计算机比作人,那么CPU相当于人的大脑,负责思维运算和计算机各个部分的命令控制;CPU种类较多,如:Intel、AMD等等,这些CPU使用的相同或者不同的指令集,每种CPU都有特定的指令集,所谓指令集就是CPU中用来计算和控制计算机系统的一套指令的集合
操作系统
操作系统就是用户和计算机相互交互的软件,不同的操作系统支持不通过的CPU(或说CPU的指令集)
Java跨平台原理
原理
Java不会直接将源程序编译成机器语言,它会首先编译成中间语言,再由解释器二次编译,解释执行;只要在需要运行 java 应用程序的操作系统上,先安装一个 Java 虚拟机(JVM Java VirtualMachine)即可。由 JVM 来负责 Java 程序在该系统中的运行。
说明
Java源程序运行时,javac编译器会把Java源程序编译成 .class的二进制字节码文件,.class文件再运行在jvm上,java解释器会将其解释成对应平台的机器码执行,所以Java跨平台就是 .class字节码文件跨平台,.class文件是与平台无关的,但是jvm在不同平台上是不同的,所以不同平台要安装不同的jvm,实现Java一次编译到处运行
机器码与字节码的区别
1、机器码完全依赖硬件存在,由于不同硬件的内嵌指令集不同,即使是相同的 0 1 代码,也可能有不同的意思,不存在跨平台性
2、只要哪一种硬件,只要安装了相应的jvm,那么它就可以将 .class文件编译成机器码语言的执行方式
①:编译执行:C语言就是编译执行的,编译器和编译生成的可执行文件与平台相关,例如,vc编译的exe就不能在Linux上运行
②:解释执行:Java是解释执行的,编译为中间码的编译器与平台无关,编译生成的中间码也与平台无关(一次编译,到处运行),中间码再由解释器解释执行,解释器是与平台相关的,也就是不同的平台需要不同的解释器语言根据执行方式的不同分类
①:编译执行,如C语言,它把源程序由特定平台的编译器一次性编译为平台相关的机器码,它的优点是执行速度快,缺点是无法跨平台;
②:解释执行,如HTML,JavaScript,它使用特定的解释器,把代码一行行解释为机器码,类似于同声翻译,它的优点是可以跨平台,缺点是执行速度慢,暴露源程序;
③:中间码+虚拟机,由Java开始引入,它既整合了编译语言与解释语言的优点,同时如虚拟机又可以解决如垃圾回收,安全性检查等这些传统语言头疼的问题,所以其后微软的.NET平台也使用的这种方法
参考:http://xiaozhen1900.blog.163.com/blog/static/1741732572011325111945246/