Java虚拟机(JVM)是一个抽象的计算机,它为Java字节码提供了一个运行环境。以下是与JVM相关的一些主要概念:
- 字节码(Bytecode):Java编译器将.java源文件编译成平台无关的字节码(.class文件)。这些字节码可以在任何JVM上运行。
- 垃圾收集(Garbage Collection):这是JVM中的一个重要特性。当程序创建新的对象时,JVM会自动分配内存。当这些对象不再需要时,垃圾收集器会自动回收它们的内存。这极大地简化了内存管理。
- 类加载器(Class Loader):类加载器负责加载类到JVM中。JVM有一个运行时类加载器,可以动态地加载类。
- 执行引擎(Execution Engine):执行引擎负责运行字节码。最初,字节码被解释执行。现代JVM(如HotSpot)使用即时编译(JIT)技术,可以将热点代码编译成本地代码,以提高性能。
- 堆(Heap):堆是JVM中的一块内存区域,用于存储对象实例。所有线程共享堆中的对象。
- 方法区(Method Area):方法区是一种存储每个类的结构信息的内存区域,如运行时常量池、字段和方法数据、构造函数和普通方法的字节码内容。
- 栈(Stack):每个线程在JVM中都有一个私有的Java栈。它包含了一个方法执行的状态,包括局部变量和中间计算的结果。
- 程序计数器(Program Counter Register):程序计数器是每个线程的私有内存,它存储了当前线程执行的字节码指令的地址。
- 本地方法栈(Native Method Stack):本地方法栈包含了Java方法(也称为本地方法)的状态。
- Java Native Interface (JNI):JNI是一个标准编程接口,它允许Java代码与其他语言写的代码交互,主要用于与C、C 等语言的库进行交互。
- 直接内存(Direct Memory):直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但是这部分内存也被频繁地使用。在JDK 1.4中新引入了NIO(New Input/Output)类,引发了直接内存的使用。Java程序通过堆上的DirectByteBuffer来访问直接内存。