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

# 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;...

深度学习--优化器

笔记内容侵权联系删 优化器 在梯度下降算法中&#xff0c;有各种不同的改进版本。在面向对象的语言实现中&#xff0c;往往把不同的梯度下降算法封装成一个对象&#xff0c;称为优化器。 算法改进的目的&#xff0c;包括但不限于: 加快算法收敛速度; 尽量避过或冲过局部极值; …...

【嵌入式】关于push老仓库到新仓库的方法

1. 背景 公司项目经常会有需要从开源项目中镜像代码过来的活,所以常常会在自己的服务器上创建一个对应的仓库,然后使用命令将期push过去。为方便日后抄命令,这里记录一下使用的命令。 2. 操作步骤 2.1. 已下载的代码push 特别提醒: 使用此脚本前请确保你修改的代码已保存…...

从线下到线上,上门洗衣服务如何实现智能化升级?

在现代快节奏生活的推动下&#xff0c;上门洗衣服务作为一种新兴的服务模式正逐渐崭露头角。它以其便捷性和创新性&#xff0c;改变了传统洗衣行业的格局&#xff0c;为消费者提供了全新的选择&#xff0c;同时也为洗衣品牌带来了新的机遇与挑战。 一、上门洗衣服务的市场现状1…...

SQL字段来源表的解析

测试例子&#xff1a; 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) 代码示例&#xff1a; package com.test; import org.apache.calcite.jd…...

理解 Python 解释器:CPython 与 IPython 的比较及选择指南

理解 Python 解释器&#xff1a;CPython 与 IPython 的比较及选择指南 在选择适合自己需求的 Python 解释器时&#xff0c;理解 CPython 和 IPython 之间的主要差异至关重要。本文将详细解释 CPython 和 IPython 的特性、优势和适用场景&#xff0c;以帮助用户做出明智的选择。…...

Java NIO 深度解析:构建高效的 I/O 操作

在 Java 编程领域&#xff0c;I/O 操作一直是至关重要的部分&#xff0c;它直接影响着应用程序的性能和响应能力。Java NIO&#xff08;New I/O&#xff09;作为传统 I/O 的增强版本&#xff0c;为处理大量并发连接和高效的数据传输提供了更强大的工具和机制。本文将深入探讨 J…...

总结拓展十六:特殊采购业务——VMI采购模式

1、VMI的定义 VMI采购模式&#xff08;Vendor Managed Inventory&#xff09;是一种合作性策略&#xff0c;旨在通过供应商管理库存&#xff0c;使供应链中的企业和供应商双方都能获得最低成本。‌在这种模式下&#xff0c;供应商根据共享的用户企业库存和实际耗用数据&#x…...

vue2 + iview(view-design) 中封装使用 vxe-table 处理表格渲染大量数据卡顿现象

今天遇到需求&#xff0c;iview组件分页每页100页时候页面卡顿现象严重&#xff0c;改造为使用vxe-table cell-mouseenter"handleCellMouseEnter" cell-mouseleave"handleCellMouseLeave" 这两个用来处理vxe-table 内容过多鼠标悬浮上去滚动 tooltip直接…...

初学者指南:知识库问答(KBQA)多跳路径的核心与应用

初学者指南&#xff1a;知识库问答&#xff08;KBQA&#xff09;多跳路径的核心与应用 知识库问答&#xff08;Knowledge Base Question Answering, KBQA&#xff09;旨在利用结构化知识库&#xff08;如Wikidata、Freebase&#xff09;回答自然语言问题。在实际应用中&#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优化算法&#xff0c;搜索最优的几个特征数据&#xff0c;进行KNN聚类&#xff0c;同时对比不同个数特征下…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

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

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

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)机…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...