首先我们要知道虚拟机的由来。虚拟机在程序和机器(装有Windows、macOS、Linux的机器等等)之间,虚拟机与程序接触,并且程序只与虚拟机接触,所以程序是面向虚拟机编程的,不需要管理这套程序在什么平台上执行。也就是说,编写好的程序,解释器编译就成为机器可以读懂并执行的代码。
虚拟机可以读懂的代码称之为字节码(java中的class文件);机器可以读懂的代码是二进制命令,有0和1组成。
过程:java源码->编译器->jvm可执行的java字节码->jvm->jvm解释器->机器可执行的二进制文件->程序运行
编译型语言:需要经过编译器,将源代码编译成机器码之后才能执行的语言。一般通过编译和链接两个步骤,编译是将我们的程序编译成机器码,链接是将程序和依赖库串联起来。优点:编译器一般有预编译的过程对代码进行了优化,因此编译只做了一次,运行时不会再编译了,因此编译型语言效率高。
缺点:编译之后如果想要修改某个功能,就需要整个模块重新编译。编译的时候根据对应的运行环境会产生不同的机器码,不同的操作系统之间,可能会有问题,根据环境的不同产生不同的可执行文件。代表语言:C、C++、Pascal、Object-C以及最近很火的苹果新语言swift,GO
解释性语言
解释性语言是在运行程序的时候才逐行进行翻译,字节码是解释型的一部分。优点:只要安装了虚拟机,就有良好的平台兼容性,容易维护,方便快速部署,不用停机维护。缺点:每次运行都要解释一遍,性能不如编程型语言。代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby
采取字节码的好处
java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低下的问题,同时又保留了解释型语言可移植的特点,所以java运行起来比较高效,无需重新编译就可以在多种不同的计算机上运行。