java基础概念与常识
基础概念与常识
1. JVM与JDK与JRE
1.1 JVM
JVM是java虚拟机,是运行java字节码的虚拟机。JVM会针对不同的操作系统开发不同版本的JVM,目的是在不同操作系统上运行相同的字节码都会给出相同的结果。
同时,不同的编程语言都可以生成字节码,并运行在jvm上
1.2 JDK
jdk全称为Java Development Kit,是java开发工具包。它包含了:JRE(java runtime environment),编译器javac和其他工具。
1.3 JRE
jre是java运行已编译java程序的环境,主要包括:JVM,java基础类库。
1.4 JDK和JRE的关系
2. 字节码
2.1 定义
字节码就是java程序编译后生成的.class文件。字节码只面向JVM虚拟机。
2.2 好处
字节码只面向JVM虚拟机,不面向任何特定处理器。这样会在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。
2.3 java程序运行过程
2.4 解释器与JIT
在.class文件到机器码这一步中,JVM首先加载字节码的文件,然后通过解释器逐行解释代码,这种逐行解释的方式较慢,所以引入了JIT(just in time)编译器,JIT属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。
这里补充一下解释器和编译器的区别:
- 编译器将字节码一次性翻译成完整的机器码。
- 解释器逐条将字节码翻译为机器码,再执行。
从.class → 机器码这一过程可以看出,java既使用了编译器,又使用了解释器,所以java是编译与解释共存的语言。
3. AOT
3.1 AOT是什么
AOT全称为ahead of time compilation,意思是在程序被执行前就将其编译成机器码,属于静态编译(类似于C++)
3.2 AOT优点
AOT 的主要优势在于启动时间、内存占用和打包体积。
- AOT避免了JIT预热的开销,提高了java的启动速度。
- 减少内存占用:JIT和解释器都需要用字节码,而AOT模式在程序部署前就已经编译为本地机器码,不需要解释器和JIT编译器。
- 增强程序安全性:很难反编译。
3.3 AOT与JIT
AOT 编译无法支持 Java 的一些动态特性,如反射、动态代理。而很多框架都要用到这些动态特性,如spring。
JIT具备更高的极限处理能力(JIT可以记录很多热点代码)
4. java和C++区别
- java中不提供指针访问内存,线程更加安全
- java的类是单继承,C++的类可以多继承。但是java的接口可以多继承
- java可以自动回收内存
- C++支持方法重载和运算符重载,java只支持方法重载。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Icyyybro!
评论