2021-11-04 编译/解释、动态/静态、强类型/弱类型
作者:互联网
jvm
"一次编译,到处运行"说的是Java语言跨平台的特征,Java的跨平台特征与Java虚拟机是密不可分的,可在不同的环境中运行,比如说Windows平台的Linux平台都有相应的JDK,安装好JDK后就有了Java语言的运行环境。其实Java语言本身与其他的编程语言没有特别大的差异,并不是Java语言可以跨平台,而是在不同的平台上都有可以让Java语言运行的环境而已,所以才有了Java一次编译,到处运行这样的效果。严格的讲。跨平台的语言不止Java一种,但是Java是较为成熟的一种.
1. 解释性、编译型
- 解释性:代码没有编译的过程,读一行执行一行,eg:JavaScript
- 编译型:运行之前需要将代码先编译成【机器指令】,再运行,eg:c语言
Java是存在编译过程的,但是它编译成的不是【机器指令】,而是【字节码】,字节码只能由JVM识别,硬件没办法识别,运行的过程是由jvm使用解释的方式执行的.(加一层:要么屏蔽复杂要么屏蔽不同)
但是为了提升效率,JVM推出了JIT(just in time complie 即时编译器),就是运行过程中,能将部分热点代码,直接编译成机器码,加快执行效率,甚至在Java9 中提出了AOT 编译器(Ahead Of Time,运行前编译)
So far, 在JVM中有三个非常重要的编译器,他们分别是:前端编译器,JIT编译器,AOT编译器。
- 前端编译器:最常见的是javac编译器,将Java源代码编译成Java字节码文件。
- JIT即时编译器:最常见的就是HotSpot虚拟机中的Client Complier 和 Server Complier,其将Java字节码编译成本地机器代码。(特点:吞吐量高,有运行时性能加成,可以跑得更快,并可以做到动态生成代码等,但是相对启动速度较慢,并需要一定时间和调用频率才能出发JIT的分层机制)
- AOT编译器:将源代码直接编译为本地字节码。(特点:内存占用低,启动速度快,可以无需runtime运行,直接将runtime静态链接至最终的程序中,但是无运行时性能加成,不能根据程序运行情况做进一步的优化。)
而在JVM中,通过这几种不同的方式的配合,使得JVM的编译质量和运行速度达到最优的状态。
Java是解释型和编译型兼顾的语言
2. 动态类型、静态类型
- 静态类型语言:变量定义时有类型声明的语言。
(1) 变量的类型在编译时确定
(2) 变量的类型在运行时不能修改
这样编译器就可以确定运行时需要的内存总量。
eg:C、Scala、Java、F#语言是静态类型语言。 - 动态类型语言:变量定义时无类型声明的语言。
(1) 变量的类型在运行时确定
(2) 变量的类型在运行时可修改
eg: Python、JavaScript、Ruby语言时动态类型语言
Java是一种静态类型的语言
3.强类型定义语言、弱类型定义语言
强类型定义语言:一旦一个变量被指定了数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。强类型定义语言是类型安全的语言。
弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反,一个变量可以赋不同数据类型的值。强类型定义语言在速度上可能略逊色与弱类型定义的语言,但是强类型定义语言带来的严谨性能有效的避免许多错误。
Java是一种强类型定义语言
标签:11,Java,语言,04,定义语言,编译,编译器,2021,类型 来源: https://blog.csdn.net/qq_46049113/article/details/121150568