八股---7.JVM

1. JVM组成

1.1 JVM由哪些部分组成?运行流程?

难易程度:☆☆☆        出现频率:☆☆☆☆

  • Java Virtual Machine:Java 虚拟机,Java程序的运行环境(java二进制字节码的运行环境)
  • 好处:一次编写,到处运行;自动内存管理,垃圾回收机制
  • 程序运行之前,需要先通过编译器将 Java 源代码文件编译成 Java 字节码文件;

  • 程序运行时,JVM 会对字节码文件进行逐行解释,翻译成机器码指令,并交给对应的操作系统去执行。

  • 好处:一次编写,到处运行;自动内存管理,垃圾回收机制

  • JVM  <---> 操作系统(windows、linux)<---> 计算机硬件(cpu、内存条)
    java跨平台是因JVM屏蔽了操作系统的差异,真正运行代码的不是操作系统

JVM 主要由四个部分组成: 运行流程:
Java 编译器(javac)将 Java 代码转换为字节码(.class 文件)

1. 类加载器(ClassLoader)

  • 负责加载 .class 文件,将 Java 字节码加载到内存中,并交给 JVM 执行

2. 运行时数据区(Runtime Data Area)

  • 管理JVM使用的内存主要包括:

  • 方法区(Method Area):存储类的元数据、常量、静态变量等。

  • 堆(Heap):存储所有对象和数组,垃圾回收器主要回收堆中的对象。

  • 栈(Stack):每个线程都有一个栈,用于存储局部变量、方法调用等信息。

  • 程序计数器(PC Register):每个线程有一个程序计数器,指示当前线程正在执行的字节码指令地址。

  • 本地方法栈(Native Method Stack):支持本地方法的调用(通过 JNI)。
    其中方法区是线程共享的,虚拟机栈本地方法栈程序计数器是线程私有的。

3. 执行引擎(Execution Engine)

  • 负责执行字节码,包含:
  • 解释器:逐条解释执行字节码。

  • JIT 编译器:将热点代码编译为机器码,提高执行效率。

  • 垃圾回收器:回收堆中的不再使用的对象,释放内存。

4. 本地库接口(Native Method Library)

  • 允许 Java 程序通过 java本地接口JNI(Java Native Interface)调用本地方法(如 C/C++ 编写的代码),与底层系统或硬件交互。

1.2 什么是程序计数器?

难易程度:☆☆☆        出现频率:☆☆☆☆

  • 程序计数器:线程私有的,每个线程一份,内部保存字节码的行号。用于记录正在执行的字节码指令的地址
  • 每个线程都有自己的程序计数器,确保线程切换时能够继续执行未完成的任务。

1.3 你能给我详细的介绍Java堆吗?

难易程度:☆☆☆        出现频率:☆☆☆☆

  • Java堆是 JVM 中用于存储所有对象和数组的内存区域。线程共享的区域堆中没有内存空间可分配给实例,也无法再扩展时,则抛出OutOfMemoryError异常。

它被分为:

  • 年轻代(存储新创建的对象),被划分为三部分:
    Eden区大多数新对象的分配区域;
    S0 和 S1(两个大小严格相同的Survivor区):Eden 空间经过 GC 后存活下来的对象会被移到其中一个 Survivor 区域;
  • 老年代:在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到老年代区间。
  • 永久代:JDK 7 及之前,JVM 的方法区(也称永久代),保存的类信息、静态变量、常量、编译后的代码
    元空间:JDK 8 及之后,永久代被 Metaspace(元空间)取代,移除了永久代,把数据存储到了本地内存的元空间中,且其大小不再受 JVM 堆的限制,防止内存溢出。

1.4 什么是虚拟机栈

难易程度:☆☆☆        出现频率:☆☆☆☆

Java Virtual machine Stacks (java 虚拟机栈)

  • 每个线程在 JVM 中私有的一块内存区域,称为虚拟机栈,先进后出,用于存储方法的局部变量和方法调用信息;

  • 每个栈由多个栈帧(frame)组成,当线程执行方法时,为该方法分配一个栈帧(Stack Frame);

  • 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法;

垃圾回收是否涉及栈内存?

  • 垃圾回收主要指就是堆内存
  • 栈内存中不会有垃圾回收的概念,因为栈内存是由 JVM 自动管理的,方法执行完成时,栈帧弹栈,内存就会释放

栈内存分配越大越好吗?

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

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

相关文章

企业级AI-DevOps工具链的构成及实现方案

企业级AI-DevOps工具链的构成及实现方案 DevOps在AI大模型研发中的重要性及应用背景一、场景驱动的AI产品研发运营机制二、AI-DevOps生产线建设三、基于DevOps的AI大模型研发机制四、基于DevOps的智能体场景研发机制五、场景驱动的应用评估分析机制 DevOps在AI大模型研发中的重…

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…

在 Win10 上 WSL 安装 Debian 12 后,Linux 如何启动 SMTP 服务?

在 WSL 的 Debian 12 中启动 SMTP 服务&#xff08;以 Postfix 为例&#xff09;&#xff0c;请按以下步骤操作&#xff1a; 1. 安装 Postfix sudo apt update sudo apt install postfix mailutils安装过程中会弹出配置窗口&#xff1a; General type of mail configuration&a…

树莓派超全系列教程文档--(59)树莓派摄像头rpicam-apps

这里写目录标题 rpicam-apps libcamera 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 rpicam-apps 树莓派操作系统 Bookworm 将相机捕捉应用程序从 libcamera-\* 重命名为 rpicam-*。符号链接允许用户暂时使用旧名称。尽快采用新的应用程序名称…

【数据结构】图论最短路径算法深度解析:从BFS基础到全算法综述​

最短路径 导读一、最短路径1.1 单源最短路径1.2 各顶点间的最短路径1.3 最短路径算法 二、BFS算法结语内容回顾下一篇预告&#xff1a;挑战带权最短路径&#xff01; 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 欢迎继续探索图算法的…

中国政务数据安全建设细化及市场需求分析

(基于新《政务数据共享条例》及相关法规) 一、引言 近年来,中国政府高度重视数字政府建设和数据要素市场化配置改革。《政务数据共享条例》(以下简称“《共享条例》”)的发布,与《中华人民共和国数据安全法》(以下简称“《数据安全法》”)、《中华人民共和国个人信息…

Linux信号保存与处理机制详解

Linux信号的保存与处理涉及多个关键机制&#xff0c;以下是详细的总结&#xff1a; 1. 信号的保存 进程描述符&#xff08;task_struct&#xff09;&#xff1a;每个进程的PCB中包含信号相关信息。 pending信号集&#xff1a;记录已到达但未处理的信号&#xff08;未决信号&a…

【Redis】笔记|第10节|京东HotKey实现多级缓存架构

缓存架构 京东HotKey架构 代码结构 代码详情 功能点&#xff1a;&#xff08;如代码有错误&#xff0c;欢迎讨论纠正&#xff09; 多级缓存&#xff0c;先查HotKey缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新…

php apache构建 Web 服务器

虚拟机配置流程winsever2016配置Apache、Mysql、php_windows server 2016配置web服务器-CSDN博客 PHP 和 Apache 通过 ​​模块化协作​​ 共同构建 Web 服务器&#xff0c;以下是它们的交互机制和工作流程&#xff1a; ​​一、核心组件分工​​ 组件角色​​Apache​​Web …

二分查找排序讲解

一、二分查找&#xff08;Binary Search&#xff09; 核心思想&#xff1a; 前提&#xff1a;数组必须是 有序的&#xff08;比如从小到大排列&#xff09;。目标&#xff1a;在数组中快速找到某个数&#xff08;比如找 7&#xff09;。方法&#xff1a;每次排除一半的数&…

【Redis实战:缓存与消息队列的应用】

在现代互联网开发中&#xff0c;Redis 作为一款高性能的内存数据库&#xff0c;广泛应用于缓存和消息队列等场景。本文将深入探讨 Redis 在这两个领域的应用&#xff0c;并通过代码示例比较两个流行的框架&#xff08;Redis 和 RabbitMQ&#xff09;的特点与适用场景&#xff0…

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…

【openssl】升级为3.3.1,避免安全漏洞

本文档旨在形成 对Linux系统openssl版本进行升级 的搭建标准操作过程&#xff0c;搭建完成后&#xff0c;实现 openssl 达到3.3以上版本&#xff0c;避免安全漏洞 效果。 一、查看当前版本 版本不高于3.1的&#xff0c;均需要升级。 # 服务器上运行以下命令&#xff0c;查看…

基于正点原子阿波罗F429开发板的LWIP应用(6)——SNTP功能和lwiperf测速

说在开头 正点原子F429开发板主芯片采用的是STM32F429IGT6&#xff0c;网络PHY芯片采用的是LAN8720A(V1)和YT8512C(V2)&#xff0c;采用的是RMII连接&#xff0c;PHY_ADDR为0&#xff1b;在代码中将会对不同的芯片做出适配。 CubeMX版本&#xff1a;6.6.1&#xff1b; F4芯片组…

C:\Users\中文名修改为英文名

C:\Users\中文名修改为英文名 背景操作步骤 背景 买了台新电脑&#xff0c;初始化好不知道啥操作把自己的登录用户名改成了中文&#xff0c;有些安装的软件看见有中文直接就水土不服了。 操作步骤 以下称中文用户名为张三。 正常登录张三用户 进入用户管理页面修改用户名&a…

YOLOv12环境配置,手把手教你使用YOLOv12训练自己的数据集和推理(附YOLOv12网络结构图),全文最详细教程

文章目录 前言一、YOLOv12代码下载地址1.YOLOv12模型结构图 二、YOLO环境配置教程1.创建虚拟环境2.激活虚拟环境3.查询自己电脑可支持最高cuda版本是多少&#xff08;无显卡的同学可以跳过这个步骤&#xff09;4.pytorch安装5.验证 PyTorch GPU 是否可用&#xff08;没有显卡的…

ES6(ES2015)特性全解析

ES6&#xff08;ECMAScript 2015&#xff09;是 JavaScript 语言发展史上的一个重要里程碑&#xff0c;它引入了许多新的语法特性和功能&#xff0c;提升了代码的可读性、可维护性和开发效率。 1. 块级作用域变量&#xff1a;let 和 const ES6 引入了 let 和 const 关键字&am…

jvm 垃圾收集算法 详解

垃圾收集算法 分代收集理论 垃圾收集器的理论基础&#xff0c;它建立在两个分代假说之上&#xff1a; 弱分代假说&#xff1a;绝大多数对象都是朝生夕灭的。强分代假说&#xff1a;熬过越多次垃圾收集过程的对象就越难以消亡。 这两个分代假说共同奠定了多款常用的垃圾收集…

数字孪生+AR/VR的融合创新

目录 引言&#xff1a;工业元宇宙的兴起与技术基石数字孪生&#xff1a;工业元宇宙的数字底座 2.1 数字孪生的概念与关键要素 2.2 数字孪生在工业领域的应用 2.3 数字孪生的技术架构 (Mermaid Graph) AR/VR&#xff1a;工业元宇宙的沉浸式体验层 3.1 AR/VR 的概念与技术原理…