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

JVM篇1--JVM内存结构

前言

(1) JVM定义

Java Virtual Machine,是java程序的运行环境(java二进制字节码的运行环境)。
优点:
(1)实现java语言的一次编写,到处运行。
(2)自动内存管理,垃圾回收功能。
(3)数组下标越界检查。
(4)多态。
JVM与JRE、JDK的关系:

JVM是一种规范,每个企业都可以实现自己的JVM。

下面的讲述的JVM都是以HotSpot为准。

(2) JVM组成部分


java源代码编译为二进制字节码(java class)后,需通过类加载器(ClassLoader)才能被加载到JVM里。类放在方法区(Method Area),类的对象放在堆(Heap),堆里面的对象调用方法时又会用到虚拟机栈(JVM Stacks)、程序计数器(PC Register)和本地方法栈(Native Method Stacks)。方法执行时每行代码由执行引擎中的解释器(Interpreter)逐行执行,方法中频繁调用的代码会被即时编译器(JIT Compiler)编译、优化执行。执行引擎中的垃圾回收(GC),会对堆里面不再被引用的对象进行回收。还有一些java代码必须调用底层操作系统的功能,需要使用本地方法接口

一、JVM的内存结构


JVM的内存结构包括上图中的5个部分。

1.1 程序计数器

Program Counter Register程序计数器(是一个寄存器)。
下图中中间的是二进制字节码反汇编后的汇编代码,二进制字节码全是0和1,读起来很困难。

特点:
(1)线程私有。切换线程时会保存寄存器的值(记录程序执行位置),程序计数器的值属于线程。
(2)不会存在内存溢出。JVM规范中规定了程序计数器没有内存溢出,各厂商对JVM实现时不用考虑程序计数器溢出。
可能会有疑问:为什么程序计数器算JVM内存结构,它不是寄存器吗?
在JVM内存结构的逻辑模型中,程序计数器被定义为一个独立的、线程私有的内存区域,用于指示下一条要执行的字节码指令。虽然在物理实现上它很可能(并且通常)映射到CPU寄存器,但这属于JVM实现的细节

1.2 虚拟机栈(又称“栈内存”)

1.2.1 定义

Java Virtual Machine Stacks(Java虚拟机栈),是线程运行需要的内存空间。
每个栈可以看成由多个栈帧(Frame)组成,一个栈帧对应一个方法运行时需要的内存,包括参数、局部变量,返回地址等信息。
每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。

若是一个方法a调用另一个方法b,则方法a的栈帧先入栈,后方法b的栈帧入栈,方法b执行完后方法b的栈帧出栈,方法a执行完方法a的栈帧出栈。

1.2.2 问题思考

(1)垃圾回收是否涉及栈内存?
不涉及。方法调用完栈帧出栈,不需要垃圾回收。
(2)栈内存越大越好吗?
不是,栈内存增大线程数会减小,因为物理内存大小是固定的
(3)方法内的局部变量是否线程安全?
题目的意思是方法中的局部变量是对线程共有的,还是对线程私有的。答案是局部变量对线程是私有的,不会产生线程安全问题。
若是局部变量是static,则局部变量对线程是共享的,如果不加线程保护则会产生线程安全问题。

总结:
如果方法内局部变量没有逃离方法的作用访问(上图中的m2方法sb对象为参数,可能也被其他线程访问;m3方法sb作为返回值,可能被其他方法获得并访问),它是线程安全的;如果是局部变量引用了对象,并逃离了方法的作用访问,则需要考虑线程安全问题。

1.2.3 栈内存溢出

有两种情况,一种是栈帧过多导致(比如结束条件错误的递归即死循环),一种是栈帧过大导致(不容易出现)。
例如:

http://www.zskr.cn/news/1513489.html

相关文章:

  • 全局计时器、智能提醒与UI交互实现
  • Quake3e:现代图形API如何重塑经典竞技场引擎的技术架构
  • 解密Apollo配置中心的高可用设计:从长轮询到本地缓存,你的配置真的安全吗?
  • 2026携号转网API选型全指南:直连接口、代码示例与生产环境踩坑实录
  • Typora插件终极指南:70+免费功能让Markdown写作效率提升300%
  • 大模型长文本摘要能力压测:资源驱动的书籍摘要方法论
  • 轻量级可信计算-望获OS的安全启动方案
  • 运筹优化面试必考:单纯形法从几何到代数的核心思想与常见坑点解析
  • **采集节点主备模:保障监控系统自身高可用**
  • 思源宋体TTF:7种字重免费商用中文解决方案
  • 2026 手机号黑名单检测 API 选型指南:技术指标、服务商对比与生产环境落地
  • 2026汕头买房必看:选择汕头房产中介公司的注意事项! - 企业品牌
  • Linux Schedutil 的 freq_update_needed:调频触发条件判断
  • 2026成都二手房装修公司实力排名:5000+业主实测数据版 - 推荐官
  • Win11Debloat:Windows系统性能优化引擎的技术解析与实践指南
  • 2026如何选择最好的汕头房产中介公司?避免购房陷阱! - 企业品牌
  • MC9S12XB微控制器:XGATE协处理器与低功耗设计实战解析
  • “老照片修复”免费开源神器!支持高清批量修复!图片总是不够清晰?轻松把模糊的图片变清晰的AI软件!图片无损放大神器!
  • Python周刊2026W23 | Polars 1.41、PyPy v7.3.23、Python 3.15、httpx2、dj-lite-tenant
  • 重庆挂机空调不制冷维修,1小时内上门就找一步到家 - 不与人计较
  • GitHub Profile美化(1)
  • 2026年TOP10口碑最佳Geo服务机构揭晓,谁是行业领头羊? - 轩铭卿
  • 淘宝自动化脚本终极指南:如何每天自动赚取淘金币,节省30分钟宝贵时间
  • 2026年职场进阶提升路径:避坑指南好找工作的证考试难度与系统方法解析
  • 2026汕头房产中介公司如何选?看完这5个秘诀再决定! - 企业品牌
  • 5分钟快速上手:asmr-downloader让你的ASMR音频下载效率提升10倍
  • 收藏!小白程序员必看:如何抓住AI大模型红利,轻松入局高薪赛道?
  • AI Agent工具链生态全景图:2026年核心组件与集成方案
  • “[13-1]PWR电源控制
  • 大模型加Excel:自动分析表格数据