当前位置: 首页 > article >正文

# JVM学习

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.kler.cn/a/401584.html

相关文章:

  • 反向代理模块
  • 生成式语言模型 三范式 预训练、微调、强化反馈学习
  • angular的promise实战案例
  • 基于Java Springboot外卖平台系统
  • Lambda常用方法
  • 远程jupyter lab的配置
  • 基于YOLOv8深度学习的婴儿情绪状态检测系统(PyQt5界面+数据集+训练代码)
  • Ubuntu20.04 Rk3588 交叉编译ffmpeg7.0
  • 疫情下的图书馆管理系统:Spring Boot实现
  • 【MCU】GD32H7定时器使用外部时钟源
  • 01 IP路由基础
  • 集群聊天服务器(13)redis环境安装和发布订阅命令
  • 电子应用设计方案-13:智能消毒柜系统方案设计
  • 【LangChain】LangChain框架快速入门
  • html本地离线引入vant和vue2(详细步骤)
  • 《Python制作动态爱心粒子特效》
  • 【C语言】操作符2(含操作符的应用)
  • 小学知识相关链接
  • 阿里云轻量应用服务器可以用在哪些场景呢
  • 《YOLO:目标检测领域的璀璨之星》
  • 网络安全之信息收集-实战-2
  • 青训营刷题笔记09
  • 【mongodb】社区版8:改变配置bindip和授权
  • Spire.PDF for .NET【页面设置】演示:更改 PDF 页面大小
  • 外汇市场中的羊群效应:如何克服盲目追随
  • CC工具箱使用指南:【CAD导出界址点Excel】