1. 介绍
JVM(Java Virtual Machine,Java虚拟机 ),能够将Java源文件解释并运行。由于计算机只认识机器码,JVM需要将Java字节码转化为计算机能识别的机器码来运行。
这里可以引出JVM的第一个功能:解释和运行。
此外,JVM还有其他功能:
- 内存管理:
- 自动为方法、对象等分配内存。
- 自动垃圾回收机制,回收不再使用的对象。(相对于C/C++的优势)
- 即时编译(Just-In-Time,JIT):对热点代码进行优化,提升执行效率。(提升Java程序性能最核心的手段)
这里展开解释下即时编译:Java语言借助JVM将字节码指令实时解释为机器码来运行在计算机上。
而C/C++在编译过程中可以直接将源代码转化为机器码,相对于Java节省了解释的过程。
虽然Java多了一步编译成字节码的过程,但也因此实现了跨平台的特性。因为Windows和Linux系统会安装不同的JVM,通过解释为当前平台机器码,来交给不同的操作系统来运行。
因此,Java支持跨平台,性能稍微差一些。与之相对的,C/C++追求性能,但不具备跨平台的特性。
此外,即时编译还体现在:对于一些热点代码(再很短时间内多次调用),JVM会认为该部分代码有必要优化,会将编译后的该部分机器码存放在内存中,下次使用时直接在内存中调用(省略了解释过程,提高了性能)。
这样,Java就能在特定场景下超越C/C++性能。
2. 常见的JVM
通过控制台输入java -version
可以查看安装的jvm类型。
常见的JVM有以下5类,应用最广的是HotSpot虚拟机。其中第二种相对于第一种,可以支持修改源代码。
HotSpot的发展历程如下:
3. JVM组成
字节码文件中的类和接口,被加载到内存后,虚拟机使用执行引擎执行代码(将字节码解释成机器码,同时使用即时编译优化性能)。执行引擎会负责本地接口的调用。
- 类加载器(ClassLoader):将字节码文件加载到内存中,使得后续使用更高效。存放字节码文件中的类、接口。
- 运行时数据区域(JVM管理的内存):JVM管理的内存,为创建对象的内存负责。
- 执行引擎(即时编译器、解释器、垃圾回收器):执行字节码文件中的指令。
- 本地接口:调用一些底层由C/C++编写的接口,比如线程的
sleep()
方法中用到的native
修饰的方法,是由C/C++编写的。
4. 总结
- JVM就是Java虚拟机,是运行在计算机上的程序,能够将Java字节码转化为计算机能识别的机器码。
- JVM的功能包括:解释和运行、内存管理、即时编译。
- JVM的组成:类加载器、运行时数据区域、执行引擎、本地接口。
以上为个人学习分享,如有问题,欢迎指正:)