JVM
JVM的运行机制
Java程序的具体运行过程:
- Java源文件被编译器编译成字节码文件
- JVM将字节码文件编译成相应操作系统的机器码
- 机器码调用相应操作系统的本地方法库执行相应的方法
Java虚拟机包括一个类加载器子系统( Class Loader SubSystem) 、运行时数据区、执行引擎和本地接口库。本地接口库调用本地方法库与操作系统交互。
其中:
-
类加载子系统用于将编译好的**.class文件加载到JVM**中;
-
运行时数据区用于存储在JVM运行过程中产生的数据, 包括程序计数器、本地方法栈、虚拟机栈、方法区、虚拟机堆。
-
执行引擎包括即时编译器和垃圾回收器, 即时编译器用于将Java字节码编译成具体的机器码, 垃圾回收器用于回收在运行过程中不再使用的对象。
-
本地接口库用户调用操作系统的本地方法完成具体的指令操作。
多线程
在多核操作系统上, JVM允许在一个进程内同时并发执行多个线程。JVM中的线程与操作系统中的线程是相互对应的。在JVM线程的本地存储、程序计数器、虚拟机栈、缓冲区分配都已经完成准备工作,JVM会调用操作系统的接口创建一个与之对应的原生线程;在JVM线程JVM线程运行结束时,原生线程随之被回收。操作系统负责调度所有线程,并为之分配CPU时间片,在原生线程初始化完毕时,就会调用Java线程的run()执行该线程,在线程结束后,会释放原生线程和Java线程堆对应的资源
Java的内存区域
JVM的