# 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程序的性能和内存使用。
相关文章:
# JVM学习
JVM JVM是什么? Java虚拟机(JVM) 是一个抽象的计算机,它是一个运行时环境,用于执行Java字节码或编译后的Java程序。JVM屏蔽了底层操作系统的差异,使得Java程序可以在任何支持JVM的操作系统上运行。 JVM能…...
【代码随想录day33】【C++复健】62.不同路径;63. 不同路径 II;343. 整数拆分;96.不同的二叉搜索树
感觉dp的题真的很适合背,当然不是死记硬背,而是当做一种模板题,出来一道新的题就往模板题上面去靠,如果套对模板的话剩下的事情其实就简单了。所以只要看一遍解法知道大致思路其实就够了,毕竟大部分dp的代码也不算难写…...

《勇者斗恶龙3:HD-2D重制版》找幽灵船攻略分享
《勇者斗恶龙3:HD-2D重制版》中的幽灵船是游戏里非常独特的一个区域,而想要找到幽灵船的话还是比较麻烦的,首先是听到关于幽灵船在世界海域上航行的传闻,包括在海盗巢穴中,但幽灵船的出现有一些具体条件。 勇者斗恶龙3…...
基于 MATLAB 的模拟退火算法详解及实现
以下是一篇更详细的关于 模拟退火算法 (Simulated Annealing) 的 MATLAB 实现的教程和代码示例,涵盖基本概念、核心思想和代码实现。 一、模拟退火算法简介 模拟退火算法(Simulated Annealing,简称 SA)是一种随机优化算法&#x…...
MQTT 服务器常用的有哪些?
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,常用于物联网(IoT)设备之间的通信。以下是一些常用的 MQTT 服务器(也称为 MQTT Broker): 1.Eclipse Mosqui…...

【android USB 串口通信助手】stm32 源码demo 单片机与手机通信 Android studio 20241118
android 【OTG线】 接 下位机STM32【USB】 通过百度网盘分享的文件:USBToSerialPort.apk 链接:https://pan.baidu.com/s/122McdmBDUxEtYiEKFunFUg?pwd8888 提取码:8888 android 【OTG线】 接 【USB转TTL】 接 【串口(下位机 SMT32等)】 需…...
汽车资讯新探索:Spring Boot技术引领
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了汽车资讯网站的开发全过程。通过分析汽车资讯网站管理的不足,创建了一个计算机管理汽车资讯网站的方案。文章介绍了汽车资讯网站的系统分析部分&…...
简单的MCU与FPGA通过APB总线实现通讯(fpga mcu APB):乘法器为例
测试平台: GW1N4器件内置 M1内核;并且可以设置 APB总线与fpga 逻辑进行交互; 框图: +---------------------+ | | | M1 Microprocessor | <-----------------+ | | | | +-----------------…...

css uniapp背景图宽度固定高度自适应可以重复
page {height: 100%;background-image: url(https://onlinekc.a.hlidc.cn/uploads/20241115/350f94aaf493d05625a7ddbc86c7804e.png);background-repeat: repeat;background-size: contain;} 如果不要重复 把background-repeat: repeat;替换background-repeat: no-repeat;...
深度学习--优化器
笔记内容侵权联系删 优化器 在梯度下降算法中,有各种不同的改进版本。在面向对象的语言实现中,往往把不同的梯度下降算法封装成一个对象,称为优化器。 算法改进的目的,包括但不限于: 加快算法收敛速度; 尽量避过或冲过局部极值; …...
【嵌入式】关于push老仓库到新仓库的方法
1. 背景 公司项目经常会有需要从开源项目中镜像代码过来的活,所以常常会在自己的服务器上创建一个对应的仓库,然后使用命令将期push过去。为方便日后抄命令,这里记录一下使用的命令。 2. 操作步骤 2.1. 已下载的代码push 特别提醒: 使用此脚本前请确保你修改的代码已保存…...

从线下到线上,上门洗衣服务如何实现智能化升级?
在现代快节奏生活的推动下,上门洗衣服务作为一种新兴的服务模式正逐渐崭露头角。它以其便捷性和创新性,改变了传统洗衣行业的格局,为消费者提供了全新的选择,同时也为洗衣品牌带来了新的机遇与挑战。 一、上门洗衣服务的市场现状1…...
SQL字段来源表的解析
测试例子: SELECT e.NAME, d.DEPT_NAME,d.DEPT_ID,EMP_ID,100EMP_ID100 FROM EMP e JOIN DEPT d ON e.DEPT_ID d.DEPT_ID WHERE e.EMP_ID IN (SELECT EMP_ID FROM EMP WHERE DEPT_ID 10) 代码示例: package com.test; import org.apache.calcite.jd…...
理解 Python 解释器:CPython 与 IPython 的比较及选择指南
理解 Python 解释器:CPython 与 IPython 的比较及选择指南 在选择适合自己需求的 Python 解释器时,理解 CPython 和 IPython 之间的主要差异至关重要。本文将详细解释 CPython 和 IPython 的特性、优势和适用场景,以帮助用户做出明智的选择。…...
Java NIO 深度解析:构建高效的 I/O 操作
在 Java 编程领域,I/O 操作一直是至关重要的部分,它直接影响着应用程序的性能和响应能力。Java NIO(New I/O)作为传统 I/O 的增强版本,为处理大量并发连接和高效的数据传输提供了更强大的工具和机制。本文将深入探讨 J…...

总结拓展十六:特殊采购业务——VMI采购模式
1、VMI的定义 VMI采购模式(Vendor Managed Inventory)是一种合作性策略,旨在通过供应商管理库存,使供应链中的企业和供应商双方都能获得最低成本。在这种模式下,供应商根据共享的用户企业库存和实际耗用数据&#x…...
vue2 + iview(view-design) 中封装使用 vxe-table 处理表格渲染大量数据卡顿现象
今天遇到需求,iview组件分页每页100页时候页面卡顿现象严重,改造为使用vxe-table cell-mouseenter"handleCellMouseEnter" cell-mouseleave"handleCellMouseLeave" 这两个用来处理vxe-table 内容过多鼠标悬浮上去滚动 tooltip直接…...

初学者指南:知识库问答(KBQA)多跳路径的核心与应用
初学者指南:知识库问答(KBQA)多跳路径的核心与应用 知识库问答(Knowledge Base Question Answering, KBQA)旨在利用结构化知识库(如Wikidata、Freebase)回答自然语言问题。在实际应用中&#x…...

创建springboot+vue项目相关配置问题
安装并配置jdk23 在官网下载jdk Java Downloads | Oracle 中国 下载完成后双击即可安装。 安装完成后配置环境变量 此电脑->右键->属性->高级系统设置 然后一直点击确定即可。 键盘上win r java -version 可以验证是否配置成功 下载并配置maven 在官网下…...

基于AOA算术优化的KNN数据聚类算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于AOA算术优化的KNN数据聚类算法matlab仿真。通过AOA优化算法,搜索最优的几个特征数据,进行KNN聚类,同时对比不同个数特征下…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...