# JVM学习

devtools/2024/11/19 11:34:39/

JVM

JVM是什么?

Java虚拟机(JVM) 是一个抽象的计算机,它是一个运行时环境,用于执行Java字节码或编译后的Java程序。JVM屏蔽了底层操作系统的差异,使得Java程序可以在任何支持JVM的操作系统上运行。

JVM能做什么?

  • 执行Java字节码:JVM能够加载、验证和执行Java字节码。
  • 内存管理:JVM负责内存分配和垃圾回收,自动管理内存,减少开发者的负担。
  • 安全控制:JVM提供了多种安全机制,如类加载器、字节码验证器等,确保程序的安全性。
  • 性能优化:通过即时编译(JIT)等技术,JVM能够动态优化代码性能。

JVM能给我带来什么好处?

  • 平台无关性:编写一次,到处运行(Write Once, Run Anywhere)。JVM使得Java程序可以在不同的操作系统上运行,无需重新编译。
  • 自动内存管理:JVM的垃圾回收机制减少了内存泄漏的风险,提高了程序的稳定性。
  • 安全性:JVM提供了多种安全机制,保护应用程序免受恶意代码的攻击。
  • 性能优化:JVM通过即时编译等技术,能够在运行时动态优化代码性能。

JVM如何使用?

  • 编写Java代码:使用Java编程语言编写源代码文件(.java)。
  • 编译Java代码:使用javac命令将源代码编译成字节码文件(.class)。
  • 运行Java程序:使用java命令启动JVM,并指定要运行的字节码文件。

JVM的原理是什么?

  • 类加载器:负责将字节码文件加载到内存中。
  • 运行时数据区:包括方法区、堆、栈、程序计数器和本地方法栈等,用于存储各种运行时数据。
  • 执行引擎:负责执行字节码,包括解释器、即时编译器(JIT)等。
  • 垃圾回收器:自动管理内存,回收不再使用的对象,释放内存空间。

JVM的内存模型

  • 方法区(Method Area):存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
  • 堆(Heap):所有对象实例以及数组都在堆上分配内存。堆是垃圾收集器管理的主要区域。
  • 虚拟机栈(VM Stack):每个线程在创建时都会创建一个虚拟机栈,存储局部变量表、操作数栈、动态链接、方法出口等信息。
  • 本地方法栈(Native Method Stack):与虚拟机栈类似,但为本地方法服务。
  • 程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器。

JVM垃圾回收机制

  • 标记-清除(Mark-Sweep):首先标记出所有需要回收的对象,然后统一回收这些对象。缺点是会产生内存碎片。
  • 复制(Copying):将内存分为两个相等的区域,每次只使用其中一个区域。当一个区域用完后,将存活的对象复制到另一个区域,然后清理已使用过的区域。适用于新生代(新生代默认)。
  • 标记-整理(Mark-Compact):标记出所有需要回收的对象,然后将存活的对象向一端移动,最后清理掉边界外的内存。适用于老年代(老年代默认)。
  • 分代收集(Generational Collection):将堆内存分为新生代和老年代,不同代使用不同的垃圾回收算法。新生代使用复制算法,老年代使用标记-整理算法。

垃圾回收器

  • Serial:单线程垃圾回收器,适用于客户端模式下的简单应用。
  • Parallel:多线程垃圾回收器,适用于多核处理器的服务器应用。
  • CMS(Concurrent Mark Sweep):以获取最短回收停顿时间为目标的垃圾回收器。
  • G1(Garbage First):面向服务器的垃圾回收器,目标是实现高吞吐量和低延迟。
  • ZGC 和 Shenandoah:新一代的低延迟垃圾回收器,适用于大内存和高性能要求的应用。

JVM架构图

以下是一个简化的JVM架构图,展示了JVM的主要组件及其关系:

+-------------------+
|        JVM        |
+-------------------+
|                   |
| +----------------+ |
| |  类加载器       | |
| +----------------+ |
| | 启动类加载器   | |
| | 扩展类加载器   | |
| | 应用类加载器   | |
| +----------------+ |
|                   |
| +----------------+ |
| | 运行时数据区   | |
| +----------------+ |
| | 方法区         | |
| | 堆             | |
| | 虚拟机栈       | |
| | 本地方法栈     | |
| | 程序计数器     | |
| +----------------+ |
|                   |
| +----------------+ |
| |  执行引擎       | |
| +----------------+ |
| | 解释器         | |
| | 即时编译器 (JIT) | |
| +----------------+ |
|                   |
| +----------------+ |
| |  垃圾回收器     | |
| +----------------+ |
| | Serial         | |
| | Parallel       | |
| | CMS            | |
| | G1             | |
| | ZGC            | |
| | Shenandoah     | |
| +----------------+ |
|                   |
+-------------------+

JVM总结

  • JVM 是Java程序运行的基础,提供了平台无关性、自动内存管理和安全性等特性。
  • 通过JVM,开发者可以编写一次代码,在多种操作系统上运行,大大提高了开发效率和程序的可移植性。
  • JVM的内部机制,如类加载器、运行时数据区、执行引擎和垃圾回收器,共同协作,确保Java程序的高效、稳定运行。
  • 内存模型 和 垃圾回收机制 是JVM的重要组成部分,理解它们有助于更好地优化Java程序的性能和内存使用。

http://www.ppmy.cn/devtools/135193.html

相关文章

<项目代码>YOLOv8 瞳孔识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

【原创】如何备份和还原Ubuntu系统,非常详细!!

前言 我在虚拟机装了一个xfce4的Ubuntu桌面版,外加输入法、IDEA等,我想将这个虚拟机里的系统直接搬到物理机中,那我可以省的再重新装一遍、配置xfce4桌面、修改一堆快捷键还有配置idea了,那直接说干就干。 本教程基于Ubuntu24.0…

多账号登录管理器(淘宝、京东、拼多多等)

目录 下载安装与运行 解决什么问题 功能说明 目前支持的平台 功能演示 登录后能保持多久 下载安装与运行 下载、安装与运行 语雀 解决什么问题 多个账号的快捷登录与切换 功能说明 支持多个电商平台支持多个账号的登录保持支持快捷切换支持导入导出支持批量删除支持…

Clip结合Faiss+Flask简易版文搜图服务

一、实现 使用目录结构&#xff1a; templates ---upload.html faiss_app.py 前端代码&#xff1a;upload.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&quo…

MQTT 服务器常用的有哪些?

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息传输协议&#xff0c;常用于物联网&#xff08;IoT&#xff09;设备之间的通信。以下是一些常用的 MQTT 服务器&#xff08;也称为 MQTT Broker&#xff09;&#xff1a; 1.Eclipse Mosqui…

STM32 独立看门狗(IWDG)详解

目录 一、引言 二、独立看门狗的作用 三、独立看门狗的工作原理 1.时钟源 2.计数器 3.喂狗操作 4.超时时间计算 5.复位机制 四、独立看门狗相关寄存器 1.键寄存器&#xff08;IWDG_KR&#xff09; 2.预分频寄存器&#xff08;IWDG_PR&#xff09; 3.重载寄存器&…

基于RK3588的移动充电机器人应用解决方案

伴随着国内新能源汽车保有量的持续增长&#xff0c;充电难题愈发凸显&#xff0c;配套充电设施的建设需求进一步扩大。然而&#xff0c;传统固定式充电桩的建设难以避免充电排队、油车占位等现象&#xff0c;“一车位一桩”的模式实际运营效率不高&#xff0c;导致充电基础设施…

Docker构建禅道项目管理系统

禅道是一款优秀的开源项目管理软件,广泛应用于软件开发和项目管理领域。本文将详细介绍如何使用Docker构建禅道镜像,并支持灵活配置外部MySQL数据库,同时确保数据的持久化和安全性。 © ivwdcwso (ID: u012172506) Dockerfile 首先,让我们来看看Dockerfile的内容: …