JVM 学习前置知识

news2025/3/26 5:42:21

JVM 学习前置知识

Java 开发环境层次结构解析

下图展示了 Java 开发环境的层级关系及其核心组件,从底层操作系统到上层开发工具,逐步构建完整的开发与运行环境:


在这里插入图片描述

1. 操作系统(Windows, MacOS, Linux, Solaris)

  • 作用:为所有上层组件提供基础运行平台。
  • 特点:Java 通过 JVM 实现跨平台能力,开发者无需针对不同操作系统单独编写代码。

2. JVM(Java Virtual Machine)

  • 定位:位于操作系统之上,是 Java 跨平台能力的核心。
  • 功能
    • 解释执行字节码(.class 文件)。
    • 管理内存分配与垃圾回收。
    • 提供运行时环境(如线程管理、异常处理)。

3. JRE(Java Runtime Environment)

  • 组成:JVM + 基础类库(如 java.lang, java.util)。
  • 作用:为 Java 程序提供运行时环境,支持程序的执行。
  • 适用场景:普通用户只需安装 JRE 即可运行已编译的 Java 程序。

4. JDK(Java Development Kit)

  • 组成:JRE + 开发工具(如 javac 编译器、jar 打包工具、调试器)。
  • 作用:开发者使用 JDK 编写、编译和调试 Java 代码。
  • 核心工具
    • javac:将 .java 文件编译为 .class 字节码。
    • java:启动 JVM 并运行程序。
    • jdb:调试工具。

5. 开发 JavaSE 程序

  • 所需组件:JDK + IDE 工具(如 IntelliJ IDEA、Eclipse)。
  • 用途:开发标准 Java 应用程序,如桌面应用、命令行工具等。
  • 示例:使用 Swing 开发 GUI 应用,或编写简单的算法程序。

6. 开发 JavaEE 程序

  • 所需组件:JDK + 应用服务器(如 Tomcat、WildFly) + IDE 工具。
  • 用途:开发企业级分布式应用,支持 Web 服务、数据库交互等复杂场景。
  • 核心技术
    • Servlet/JSP:处理 HTTP 请求与响应。
    • EJB:实现业务逻辑组件。
    • JPA:数据库持久化操作。
  • 应用服务器角色:提供容器管理、事务控制、安全性等企业级功能。

依赖关系总结

操作系统 
└── JVM 
    └── JRE(JVM + 基础类库) 
        └── JDK(JRE + 编译工具) 
            ├── JavaSE 开发(JDK + IDE) 
            └── JavaEE 开发(JDK + 应用服务器 + IDE)

引言

Java 虚拟机(JVM)是 Java 生态系统的核心组件,它使得 Java 能够实现“一次编写,到处运行”的特性。理解 JVM 的底层原理,不仅能帮助我们编写高性能的代码,还能有效解决实际开发中的疑难问题(如内存泄漏、性能瓶颈等)。


什么是 JVM?

定义:

Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境)

JVM 核心组件

  1. 类加载器(ClassLoader):加载 .class 文件到内存。
  2. 运行时数据区:包括方法区、堆、虚拟机栈、本地方法栈、程序计数器。
  3. 执行引擎:解释或编译执行字节码。
  4. 垃圾回收器(GC):自动回收不再使用的对象。

JVM的好处

  1. ​ 一次编写,到处运行
  2. ​ 自动内存管理,垃圾回收功能
  3. ​ 数组下标越界检查
  4. ​ 多态

学习 JVM 有什么用?

  1. 性能调优
    • 通过调整堆内存大小(-Xms, -Xmx)或选择垃圾回收器(如 G1、ZGC)优化应用性能。
  2. 排查问题
    • 分析内存溢出(OOM)、死锁等问题(工具:jstack, jmap, VisualVM)。
  3. 深入理解 Java 特性
    • 理解多线程(线程栈模型)、异常处理(异常表)等底层机制。
  4. 面试高频考点
    • JVM 内存模型、垃圾回收算法、类加载机制等是 Java 后端面试的常见问题。

常见的 JVM 实现

名称特点
HotSpotOracle 官方默认 JVM,应用最广泛,支持多种垃圾回收器和优化策略。
OpenJ9IBM 开发,低内存占用和高启动速度,适合云原生和微服务场景。
GraalVM支持多语言(Java、Python、JS),提供原生镜像编译(Native Image)。
Zing专为低延迟场景设计,无停顿垃圾回收(C4 算法)。

学习路线

在这里插入图片描述

1. 基础概念

  • 书籍:《深入理解 Java 虚拟机》(周志明)
  • 重点:JVM 内存结构、垃圾回收算法、类加载过程。

2. 工具实践

  • 监控工具jconsole, VisualVM, Arthas
  • 内存分析:使用 MAT(Memory Analyzer Tool) 分析堆转储文件。

3. 调优实战

  • 参数调优:堆大小、新生代/老年代比例(-XX:NewRatio)、选择 GC 算法。
  • 案例:解决 Full GC 频繁、Young GC 时间过长等问题。

4. 进阶学习

  • 源码研究:HotSpot 源码(如垃圾回收器实现)。
  • 新技术:学习 ZGC、Shenandoah 等低延迟 GC 的原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数智读书笔记系列021《大数据医疗》:探索医疗行业的智能变革

一、书籍介绍 《大数据医疗》由徐曼、沈江、余海燕合著,由机械工业出版社出版 。徐曼是南开大学商学院副教授,在大数据驱动的智能决策研究领域颇有建树,尤其在大数据驱动的医疗与健康决策方面有着深入研究,曾获天津优秀博士论文、…

解决python配置文件类configparser.ConfigParser,插入、读取数据,自动转为小写的问题

配置类 [Section1] Key_AAA Value[Section2] AnotherKey Value默认情况下,ConfigParser会将ini配置文件中的KEY,转为小写。 重载后配置类: 继承类从configparser.ConfigParser改为configparser.RawConfigParser重载方法optionxform&#…

什么是 BA ?BA怎么样?BA和BI是什么关系?

前几天有朋友在评论区提到了BA这个角色,具体是干什么的,我大概来说一下。 什么是BA BA 英文的全称是Business Analyst,从字面上意思就是商业分析师,做过商业智能BI项目的应该比较了解。实际上以我个人的经验,BA 的角…

Jmeter旧版本如何下载

1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本:5.4.1

Python帕累托图(Pareto Chart): 从数据排序到决策优化

帕累托图(Pareto Chart)是一种基于80/20法则的经典数据可视化工具,广泛应用于质量管理、项目管理、业务分析等领域。本文将从其原理、构成、实现方法到应用场景进行全面解析,并附Python代码示例。 一、帕累托图的定义与起源 帕累…

Python---数据分析(Pandas六:二维数组DataFrame,DataFrame的创建,DataFrame的属性)

一、 二维数组DataFrame DataFrame 是 Pandas 中的一个表格型的数据结构,包含有多列的数据,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame 即有行索引也有列索引,可以被看做是由 Series 组成的字典。 二、DataFrame的…

内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP

1.WinRM&WinRS 条件: 双方开启winrm winrs服务 2008版本以上默认开启,win 7默认关闭 检测使用cs内置端口扫描5985开放情况 进行连接 winrs -r:http://192.168.93.30:5985 -u:administrator -p:Whoami2021 whoami 2.内网-spn shell setspn -T …

深入理解 lt; 和 gt;:HTML 实体转义的核心指南!!!

&#x1f6e1;️ 深入理解 < 和 >&#xff1a;HTML 实体转义的核心指南 &#x1f6e1;️ 在编程和文档编写中&#xff0c;< 和 > 符号无处不在&#xff0c;但它们也是引发语法错误、安全漏洞和渲染混乱的头号元凶&#xff01;&#x1f525; 本文将聚焦 <&#…

红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法

红数码影视(RED Digital Cinema)的摄像机可以生成两种RAW级高清视频文件&#xff0c;一种是R3D&#xff0c;一种是MOV。其中MOV属于苹果(apple)公司的QT视频封装结构&#xff0c;使用的视频编码是Apple ProRes;而R3D则是RED公司自创的RAW视频文件&#xff0c;这种文件解码需要使…

关于TVS管漏电流的问题?

问题描述&#xff1a; 在量产的带电池故事机生产中&#xff0c;工厂产线测试电流时&#xff0c;有1台机器电流比正常机器大10mA左右。 原因分析&#xff1a; 1、分析电路原理图&#xff0c;去除可能出现问题的电压或器件&#xff08;不影响系统&#xff09;&#xff0c;发现…

区块链交易所平台开发全解析

在数字化飞速发展的今天&#xff0c;区块链技术已成为金融领域的核心驱动力之一。作为数字货币交易的关键平台&#xff0c;区块链交易所的开发不仅涉及复杂的技术环节&#xff0c;还需要兼顾用户体验、安全性、合规性等多个方面。本文将深入探讨区块链交易所平台的开发流程、关…

蓝桥杯_拔河_java

佬们能不能对思路二提供点建议&#xff0c;一直过不了T_T。 题目 思路 首先感觉有个坑点&#xff0c;就是可以不用把所有学生都选上&#xff0c;但是一定要保证两个部分学生的编号是连续的。比如一共5个人&#xff0c;编号是{1&#xff0c;2&#xff0c;3&#xff0c;4&#xf…

fastapi 实践(三)Swagger Docs

fastapi 实践&#xff08;一&#xff09;基础 fastapi 实践&#xff08;二&#xff09;异常捕获 fastapi 实践&#xff08;三&#xff09;Swagger Docs fastapi Swagger 1. FastAPI 交互式 API 文档2. 故障解决2.1. FastAPI 访问 docs 显示空白/加载失败2.2. Swagger 报错&…

每日一题力扣3248.矩阵中的蛇c++

3248. 矩阵中的蛇 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int finalPositionOfSnake(int n, vector<string>& commands) {int i 0;int j 0;for (int k0;k<commands.size();k) {if (commands[k] "RIGHT")j;else if (comma…

Channel-wise Knowledge Distillation for Dense Prediction论文阅读和

paper&#xff1a;https://arxiv.org/pdf/2011.13256.pdf code&#xff1a;https://github.com/open-mmlab/mmrazor 这篇paper主要是商汤开源的mmrazor中提及在detection有效果&#xff0c;我之前记录的几篇sota文章虽然在各自的paper中在detection领域都有提及有增益&#…

centos 7 搭建FTP本地用户

在 CentOS 7 系统上基于本地用户搭建 FTP 服务&#xff0c;可按以下步骤操作&#xff1a; 1. 安装 vsftpd 服务 vsftpd 是一款常用的 FTP 服务器软件&#xff0c;可借助 yum 来安装&#xff1a; bash yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash systemct…

混元视频与万相2.1全面对比分析

混元视频与万相2.1全面对比分析&#xff08;2025版&#xff09; 一、模型背景与技术定位 混元视频&#xff08;HunYuan Video&#xff09; 由腾讯开源&#xff0c;定位为“影视级AI视频生成工具”。核心能力集中在图生视频领域。模型架构基于13B参数规模&#xff0c;强调导演级…

20250318在ubuntu20.04中安装向日葵

rootrootrootroot-X99-Turbo:~$ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb rootrootrootroot-X99-Turbo:~$ sudo apt-get install -f rootrootrootroot-X99-Turbo:~$ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 20250318在ubuntu20.04中安装向日葵 2025/3…

如何记录Matlab程序运行过程中所占用的最大内存(续)

在上一篇博客中&#xff0c;我们讨论了如何记录Matlab程序运行过程中所占用的最大内存。 博客原文&#xff1a;如何记录Matlab程序运行过程中所占用的最大内存-CSDN博客 但经过测试发现&#xff0c;这与实际有非常大的差异。运行如下例子&#xff1a; clear;clc; profile on…

自动驾驶背后的数学:多模态传感器融合的简单建模

上一篇博客自动驾驶背后的数学:特征提取中的线性变换与非线性激活 以单个传感器为例,讲解了特征提取中的线性变换与非线性激活。 这一篇将以多模态传感器融合为例,讲解稍复杂的线性变换和非线性激活应用场景。 (一)权重矩阵的张量积分解 y = W x + b = [ w 11 ⋯ w 1 n ⋮…