JVM – 基本概念

内容纲要

以下概念涵盖了JVM的主要知识点。在学习过程中,结合实际项目和场景,逐步深入理解和掌握这些基本概念。

Java虚拟机(Java Virtual Machine, JVM)

Java虚拟机是Java技术的核心,它是一个抽象计算机,负责执行Java字节码,实现了Java的跨平台特性。

字节码(Bytecode)

Java源代码经过编译后生成的中间代码,具有跨平台性。Java虚拟机将字节码解释执行或编译成本地机器码执行。

类加载器(Class Loader)

类加载器负责从文件系统、网络或其他数据源加载Java类到JVM中。类加载器包括Bootstrap类加载器、扩展类加载器和应用类加载器等。

双亲委派模型(Parent Delegation Model)

Java类加载器的工作原理,遵循“先询问父类加载器,再尝试自己加载”的策略,保证类的唯一性。

运行时数据区域

JVM在运行时的内存分配,包括方法区、堆、Java栈、本地方法栈和程序计数器。

方法区(Method Area)

存储已加载类的结构信息,如类名、访问修饰符、常量池、字段描述、方法描述等。

堆(Heap)

存放对象实例和数组的内存区域,是垃圾回收的主要区域。堆分为新生代(Young Generation)和老年代(Old Generation)。

Java栈(Java Stack)

存放局部变量、操作数栈、动态链接和方法出口等信息。每个线程有一个独立的Java栈。

本地方法栈(Native Method Stack)

存储Java本地方法(native method)的调用信息。与Java栈类似,每个线程有一个独立的本地方法栈。

程序计数器(Program Counter Register)

存储当前线程正在执行的字节码指令的地址。每个线程有一个独立的程序计数器。

垃圾回收(Garbage Collection, GC)

自动回收不再使用的对象所占用的内存。常见的垃圾回收算法有标记-清除、复制、标记-整理和分代收集等。

Java内存模型(Java Memory Model, JMM)

描述Java程序中各种变量(线程共享的内存区域)如何在内存中存储,以及它们如何被不同的线程操作。

线程同步

通过锁机制(如synchronized关键字)控制多线程对共享资源的访问,保证数据的一致性。

JIT编译器(Just-In-Time Compiler)

将字节码动态编译成本地机器码,提高程序执行效率。JIT编译译器是HotSpot虚拟机的一部分,可以对热点代码进行优化。

逃逸分析(Escape Analysis)

JVM对代码的静态分析技术,用于判断对象的作用域是否仅限于当前线程。逃逸分析可以用于锁消除、锁粗化和标量替换等优化。

锁优化技术

包括偏向锁、轻量级锁、重量级锁、锁消除和锁粗化等。这些技术可以提高多线程环境下程序的执行性能。

垃圾收集器(Garbage Collector)

负责自动回收内存的组件。常见的垃圾收集器有Serial、ParNew、CMS、G1等。

分代回收策略(Generational Collection)

将堆划分为新生代和老年代,根据对象的生命周期采用不同的垃圾回收算法,提高垃圾回收效率。

内存屏障(Memory Barrier)

一种同步原语,用于控制内存访问顺序,保证数据在多线程环境下的正确性和可见性。

Happens-Before规则

用于描述内存操作顺序,规定了哪些操作必须在其他操作之前完成。这有助于确保数据在多线程环境下的正确性。

Java性能调优工具

用于监控和分析Java应用性能的工具,如JConsole、VisualVM、Java Mission Control等。

HotSpot虚拟机

Oracle实现的JVM,广泛应用于实际开发中。具有优秀的性能、成熟的垃圾回收机制和JIT编译器等特点。

永久代(Permanent Generation)与元空间(Metaspace)

永久代(PermGen)是HotSpot虚拟机中方法区的实现,存储已加载类的元数据。从Java 8开始,永久代被移除,取而代之的是元空间(Metaspace),位于本地内存(Native Memory)中。

安全点(Safepoint)

在JVM中的特定位置,用于暂停线程以进行垃圾回收和其他操作。安全点通常位于方法调用、循环回边和异常处理等位置。

安全区域(Safe Region)

在JVM中,线程执行的一段连续代码片段,在这段代码片段中,线程不会触发安全点。当线程进入安全区域时,它将通知JVM,若需要暂停线程,JVM会等待线程离开安全区域。

弱引用(Weak Reference)、软引用(Soft Reference)与虚引用(Phantom Reference)

Java中的特殊引用类型,用于处理对象生命周期和垃圾回收。
弱引用在垃圾回收时会被回收;
软引用在内存不足时会被回收;
虚引用主要用于追踪对象被回收的状态。

类的卸载

当一个类不再被引用时,JVM会将其从方法区中移除,释放内存。

确定性(Deterministic)

某些垃圾回收算法(如Azul C4和ZGC)的特点,它们可以在预定时间内完成垃圾回收,减少应用程序的停顿时间。

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward