新闻详情

新闻详情

首页 / 资讯中心 / 详情

JVM篇1--JVM内存结构

发布时间:2026/9/14 2:09:23来源:尧图网络
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 栈内存溢出有两种情况,一种是栈帧过多导致(比如结束条件错误的递归即死循环),一种是栈帧过大导致(不容易出现)。例如:
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Unity数字孪生客户端:OPC UA+移动端优化的产线实时监控与节拍仿真 2026/9/14 12:32:59

Unity数字孪生客户端:OPC UA+移动端优化的产线实时监控与节拍仿真

简介:本资源是一套基于Unity引擎实现的手机生产线数字孪生系统完整客户端工程,面向智能制造领域开发者、工业可视化工程师及高校数字孪生课程实践者,聚焦产线三维建模、实时数据驱动、设备状态仿真与移动端适配等核心需求。压缩包共2000个文件…

阅读更多 →
H5页面跳转微信小程序:三种实现方式与单页源码全解析 2026/9/14 12:32:59

H5页面跳转微信小程序:三种实现方式与单页源码全解析

简介:面向微信小程序运营者与H5开发者的轻量级跳转工具,以单个HTML页面实现从短信、邮件、百度、知乎、抖音、快手等外部渠道直接唤起微信并跳转到指定小程序或链接,有效缩短小程序引流路径,适用于地推物料、短信营销、广告投放、…

阅读更多 →
Vector 代码风格指南深度解读:从 rustfmt 到内部遥测的工程规范 2026/9/14 12:32:59

Vector 代码风格指南深度解读:从 rustfmt 到内部遥测的工程规范

Vector 代码风格指南深度解读:从 rustfmt 到内部遥测的工程规范 【免费下载链接】vector A high-performance observability data pipeline. 项目地址: https://gitcode.com/GitHub_Trending/vect/vector 导读 本篇文章围绕 Vector 仓库的权威代码风格文档 …

阅读更多 →
网络爬虫技术:原理、实战与法律边界 2026/9/14 12:32:59

网络爬虫技术:原理、实战与法律边界

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
ESP32与MAX30102心率检测:从硬件接线到PPG算法实战 2026/9/14 12:32:59

ESP32与MAX30102心率检测:从硬件接线到PPG算法实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Data-Science-For-Beginners 仓库工程指南:环境搭建、构建测试与多语言翻译体系(基于 AGENTS.md) 2026/9/14 12:29:57

Data-Science-For-Beginners 仓库工程指南:环境搭建、构建测试与多语言翻译体系(基于 AGENTS.md)

Data-Science-For-Beginners 仓库工程指南:环境搭建、构建测试与多语言翻译体系(基于 AGENTS.md) 【免费下载链接】Data-Science-For-Beginners 10 Weeks, 20 Lessons, Data Science for All! 项目地址: https://gitcode.com/GitHub_Trendi…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞