Java中JVM内存结构(完整)

JVM-01 JVM内存结构 文章目录1.JVM整体架构1.1 JVM(虚拟机)1.2 Java虚拟机阵营2.JVM子系统构成3.JVM内存结构3.1 名词解释3.2 JVM对该区域规范了两种异常3.3 实例详解Java栈3.4 栈+堆+方法区的交互关系3.5 堆(线程共享)3.5.1 **为什么jdk1.8用元数据区取代了永久代**?3.5.2 java虚拟机调优的目的3.6 JVM执行案例分析3.6.1 编写java类3.... 阅读详情

1. 程序计数器(PC寄存器)

  • 作用:记录每个线程当前执行的字节码指令的地址。
  • 特点:
    • 独立性:每个线程都有自己的程序计数器,彼此独立,不会相互影响。
    • 线程切换:线程执行时,程序计数器记录当前字节码指令地址;当线程切换时,通过程序计数器恢复原来的执行位置。
    • 内存管理:不会发生 OutOfMemoryError(内存溢出),因为程序计数器占用的内存很小。

2. Java 虚拟机栈

  • 作用:管理方法执行过程中创建的栈帧,存储局部变量、操作数栈、动态链接和方法返回地址。
  • 特点:
    • 栈帧(Stack Frame):每个方法在调用时会创建一个栈帧,它是虚拟机栈的基本数据单元。栈帧会随着方法的调用和返回进出虚拟机栈。
    • 局部变量表:用于存储方法内部的变量,包括基本数据类型(如 int、long)和对象引用。空间大小在编译期间已确定。
    • 操作数栈:执行方法中的指令时用于保存中间结果,从局部变量表中加载数据,执行计算和操作等。
    • 动态链接:用于支持方法调用,包括解析运行时方法的具体地址。
    • 方法返回地址:保存方法执行完后返回的位置,便于上层调用方法继续执行。
  • 异常:
    • StackOverflowError:当栈的深度超过虚拟机所允许的最大值。
    • OutOfMemoryError:当栈需要的内存超出系统可用的内存。

3. 本地方法栈

  • 作用:专门用于执行本地方法(native),与虚拟机栈功能类似,但它支持使用非 Java 语言编写的代码(例如 C/C++)。
  • 特点:
    • 线程独立:本地方法栈也是每个线程私有的,与虚拟机栈类似,执行本地方法时会创建本地栈帧。
    • JNI(Java Native Interface):通过 JNI 技术,Java 方法可以调用本地方法以提高性能或访问底层系统资源。
    • 存储内容:本地方法栈中存储非 Java 代码执行的状态、调用的参数和返回结果。
  • 异常:
    • StackOverflowError:栈溢出。
    • OutOfMemoryError:系统内存不足时出现的错误。

4. 堆(Heap)

  • 作用:用于存储所有线程共享的对象实例和数组,是 Java 内存中最大的区域。
  • 特点:
    • 线程共享:堆是各线程共享的内存区域,存放所有对象实例和数组。
    • 垃圾回收:堆是垃圾回收的主要管理区域,未被引用的对象会被 GC 回收。
    • 分代结构:
      • 年轻代(Young Generation):存放新生成的对象,GC频繁。包括:
        • Eden区:绝大多数新生对象先进入 Eden 区。
        • Survivor区:包括 From Survivor 和 To Survivor 两个小区域,Eden 区中存活下来的对象会被转移到 Survivor 区。
      • 老年代(Old Generation):存放生命周期长的对象。当对象在年轻代多次 GC 后依然存活,则会被移入老年代。
      • 永久代(或元空间 Metaspace):
        • 永久代(JDK 7 及之前):存放类元数据,如类信息、常量等。
        • 元空间(JDK 8 及之后):与永久代功能相似,但使用的是系统内存而非堆内存。
  • 异常:
    • OutOfMemoryError:当堆中没有足够的空间分配新对象时会抛出。

5. 方法区

  • 作用:存储已加载的类信息、常量池、静态变量、即时编译器(JIT)编译后的代码等。
  • 特点:
    • 运行时常量池:用于存储编译期生成的字面量和符号引用。类加载后,常量池中的内容会被动态解析为内存地址。
    • 类信息:存放类元数据,包括类名、方法、字段等信息,便于类加载后能直接访问其结构。
    • JIT编译后的代码:即时编译器编译后的方法字节码,能提高性能。
    • 元空间(JDK 8 引入):元空间与方法区的功能相似,但元空间使用的是系统内存,而非堆内存。
  • 异常:
    • OutOfMemoryError:在大量动态生成类或大量使用静态变量时,方法区内存不足可能会导致 OutOfMemoryError。

总结

完整的 JVM 内存结构分为程序计数器、虚拟机栈、本地方法栈、堆和方法区。各区域协作,管理 Java 程序的执行过程、对象生命周期和方法调用等,确保 JVM 的高效和稳定运行。

Java之JVM内存结构、Java内存模型、Java对象模型 为什么80%的码农都做不了架构师?>>> ... 阅读详情

相关推荐

英飞凌TC3xx DSADC旋变软解码实战:从示波器波形到VX1000数据,手把手教你避坑

本文详细介绍了英飞凌TC3xx系列微控制器的DSADC模块在电机旋变软解码中的实战应用。从示波器波形分析到VX1000数据采集,提供了一套完整的调试方法论,帮助工程师快速定位和解决常见问题,提升解码精度和系统性能。

weixin_30598225的博客 517

JVM——JVM内存结构

我们可以使用参数-Xss选项来设置线程的最大栈空间,栈的大小直接决定了函数调用的最大可达深度。方法区与Java堆一样, 是各个线程共享的内存区域, 它用于存储已被虚拟机加载的类信息、 常量、 静态变量、 即时编译器编译后的代码等数据。作用:主管java程序的运行,它保存方法的局部变量(8种基本数据类型、对象的引用地址)、部分结果,并参与方法的调用和返回。由于跨平台性的设计,java的指令都是根据栈来设计的。在jvm规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。

庄小焱 1619

PADS VX2.4差分对设置避坑指南:常见错误与解决方案

本文深度解析了在PADS VX2.4中进行高速PCB设计时,差分对设置的核心要点与常见陷阱。针对Layout规则设置、Router布线实战中的阻抗控制、线长匹配等关键环节,提供了具体的避坑指南和解决方案,帮助工程师确保信号完整性,提升设计质量。

weixin_29216049的博客 359

JVM篇之内存结构

一些带有 native 关键字的方法就是需要 JAVA 去调用本地的C或者C++方法,因为 JAVA 有时候没法直接和操作系统底层交互,所以需要用到本地方法栈,服务于带 native 关键字的方法。

m0_66689823的博客 770

超大规模AI集群跨数据中心互联:Scale-Across技术实现与部署实践

分布式系统通过将计算任务分散到多个节点协同执行,实现算力的横向扩展。其核心原理在于网络通信、数据同步和资源调度机制的技术协同。在AI基础设施领域,分布式架构能有效突破单数据中心算力瓶颈,支撑万亿参数大模型训练。特别是面对长距离传输时延和带宽稳定性挑战,需要采用RDMA、确定性网络等关键技术。Scale-Across作为分布式系统的高级形态,通过跨地域多数据中心互联,构建逻辑统一的AI算力池,为超大规模AI训练和全球推理服务提供核心支撑。本文聚焦AI集群跨数据中心互联的技术路径,涵盖全栈优化、网络自治等实践方

chouxuyi9789的博客 400

AI Agent辅助企业财务分析与预测

企业财务分析与预测是企业管理中至关重要的环节,准确的财务分析与预测能够帮助企业管理者做出明智的决策,合理规划资源,降低风险。然而,传统的财务分析与预测方法往往依赖于人工经验和简单的统计模型,存在效率低、准确性差等问题。随着人工智能技术的飞速发展,AI Agent作为一种智能的软件实体,能够自主地感知环境、做出决策并采取行动,为企业财务分析与预测带来了新的解决方案。

AI天才研究院 919

【JVM】Java虚拟机(一)——内存结构

Java虚拟机(JVM)内存结构分为线程私有区域(程序计数器、虚拟机栈、本地方法栈)和共享区域(堆、方法区)。程序计数器记录执行指令,虚拟机栈存储方法调用栈帧,本地方法栈处理Native方法。堆是最大内存区域,用于对象存储和GC回收。方法区存储类信息、常量等,JDK8后改为元空间。StringTable是哈希表结构,管理字符串引用,JDK7后移至堆内存。直接内存位于堆外,通过NIO操作,提升I/O性能但需手动管理。各区域协同工作,共同支撑Java程序运行。

gadiaola的博客 1830

GPL vs MIT:独立开发者选择开源协议的法律与商业考量

你可能听过这样的故事:某个开发者用业余时间写了个超好用的工具库,开源后被某大厂悄悄集成到闭源产品里赚得盆满钵满,开发者却连杯奶茶钱都没拿到;也可能听说过另一个案例:开发者选了GPL协议,结果用户修改代码后必须开源,反而推动项目社区快速壮大,最终靠技术服务赚到了钱。这些故事的核心矛盾,都源于开源协议的选择。对于独立开发者(尤其是单枪匹马写代码的个人或小团队),开源协议不是“随便选一个就行”的小事——它是代码的“使用说明书”,更是保护自身权益、规划项目未来的关键工具。

AI天才研究院 1177

【JVM系列】jvm内存结构详解

我们为什么要学习JVM?面试的需要中高级程序员的必备技能(项目管理、调优的需要)极客精神( 比如:垃圾算法回收、JIT、底层原理)HotSpot历史最初由一加名为"Longview Technologies"的小公司设计。1997年,此公司被Sun收购;2009年,Sun公司被甲骨文收购。JDK1.3时,HotSpot VM称为默认虚拟机。目前HotSpot占有绝对的时长地位,称霸武林。不管是现在仍在广泛使用的JDK6,还是使用比例较多的JDK8中,默认的虚拟机都是HotSpot。

初念初恋的博客 881

OPCUA二(通过OPCUA服务器访问CPU)

摘要:本文介绍了使用UaExpert软件连接西门子PLC的OPC UA配置方法,包括IP地址设置(默认端口4840)、安全认证和证书信任流程。详细说明了数据访问操作,如变量拖拽监控和属性解读(NodeId、Value、状态码等)。特别强调连接仿真Advance7时需先启动实例。最后预告下章将讲解通过KerServer访问CPU。文章涵盖配置步骤、常见问题处理及实用技巧,适合工业自动化开发者参考。

欢迎来到RaymondLeigh的知识共享基地 1336

手把手教你学 Simulink (1.3)--Simulink 的模块库及其模块介绍

Simulink 提供了丰富的模块库,涵盖了从基本的信号生成和处理到复杂的数学运算和系统建模的各种功能。通过熟悉这些模块库及其模块,你可以更高效地构建和仿真动态系统。

MHD0815的博客 5150

JVM的内存结构详解

程序计数器/寄存器: 我们在程序中无法控制堆:存放用new产生的数据(对象实例和数组)栈:基本数据类型和对象的引用, 对象本身是不存放在栈中的,而是存放在堆中方法区: 存放在对象中用static定义的静态成员(全局变量和静态变量)和常量GitHub。

2401_84876135的博客 1099

18|AI 辅助精准测试:让平台会解释、会总结、会推荐

本文介绍 AI 在精准测试平台中的落地方式,包括变更摘要、风险解释、补测建议和报告总结。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。从报告中提取变更文件、未覆盖行、推荐用例。拼成结构化 JSON。让 AI 生成 200 字质量摘要。把摘要展示在报告顶部。读完本文后,可以复制下面的 Prompt,让 AI 生成一个报告总结练习。你是一名 AI 应用开发专家和测试架构师。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 55

图解Java:JVM内存结构完整版

m_beautyPang的博客 451

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

超级详细!!!JVM虚拟机完整知识点 涵盖:内存结构、垃圾回收、类加载、字节码技术、内存模型。Java Virtual Machine!

一、什么是JVM 1、定义 Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境) 2、好处 一次编写,到处运行 自动内存管理,垃圾回收机制 数组下标越界检查 3、比较 JVM JRE JDK的区别 4、常见的JVM 二、内存结构 1、整体架构 2、程序计数器 (1)、定义 (2)、作用 用于保存JVM中下一条所要执行的指令的地址 特点 线程私有 CPU会为每个线程分配时间片,当当前线程的时间片使用完以后..

weixin_45203539的博客 1449

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

JVM内存概述

Jvm整体结构 java代码执行流程 java源码.java—java编译器—字节码 —java虚拟机(类加载器—字节码校验器—翻译字节码(解析执行)—Jit编译器(编译执行))—操作系统 翻译字节码,jit编译器:叫做执行引擎,作用是把高级语言翻译成机器指令 Java指令根据栈来设计的:跨平台性,指令集小,指令多,执行性比寄存器差 JVM生命周期 虚拟机启动:引导类加载器创建一个初始类 虚拟机执行:java程序启动时,虚拟机才执行,程序结束,虚拟机停止。只有虚拟机一个进程,我们写的程序都是虚拟机的线程。

weixin_47093904的博客 145

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Java面试题1】简单说说JVM堆的内存结构和GC回收流程

文章目录前言JVM堆内存结构简述JVM堆内存结构图堆初体验结构详情新生代老年代永久代/元空间GC回收流程GC回收流程图GC回收详细流程查看JDK自带可视化堆空间图总结 前言 我们在Java面试中,只要是2年以上经验,一定会问你一下关于JVM方面的问题。开发两年时间不能对JVM没有了解,如果你还不了解,说明你的学习与探索能力不高,不能给到应有的加分项哦!小编也是最近刚刚开始学习,总结一下最近的学习成果。方便以后看,也希望小伙伴们看到可以帮助到您! JVM堆内存结构简述 JVM堆内存结构图 堆初体验 所有的对

小王博客基地 1202

java JVM(内存结构,类的加载,双亲委派模型,各种常量池)

JVM面试必考(内存结构,类的加载,双亲委派模型,各种常量池)

zhhongying的博客 300

JVM内存结构和Java内存模型别再傻傻分不清了

JVM内存结构和Java内存模型都是面试的热点问题,名字看感觉都差不多,网上有些博客也都把这两个概念混着用,实际上他们之间差别还是挺大的。 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关,本文针对这两个总是被混用的概念展开讲解。 文章目录JVM内存结构JVM构成JVM内存结构程序计数器虚拟机栈本地方法栈堆方法区GC垃圾回收机制1. 垃圾判别方法引用计数算法可达性分析算法2. 垃圾回收算法标记清除法标记整理法复制算法3. 分代垃圾回收机制4. 垃圾回收器5. 四种引

clonechen 5万+

JVM内存结构详解

文章目录一、你了解JVM内存模型吗在这之前需要知道JVM内存模型图——JDK1.81.1、程序计数器1.2、Java虚拟机栈(Stack)1.1.1、java.lang.StackOverflowError问题1.3、本地方法栈1.4、元空间(MetaSpace)1.4.1、MetaSpace相比PermGen的优势1.5、Java堆(Heap)二、JVM三大性能调优参数 -Xms -Xmx -X...

不学习如何码遍天下 1万+

JAVA内存模型与JVM内存结构

注意区分Java内存模型(Java Memory Model,简称JMM)与Jvm内存结构,前者与多线程相关,后者与JVM内部存储相关。本文会对两者进行简单介绍。

weixin_43681666的博客 3960

JVM之深入理解JVM内存结构(Java内存结构/Java内存区域)、Java内存模型

Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、JAVA内存结构、JAVA内存区域、Java内存模型,这就是几个截然不同的概念,但是很多人容易弄混。 可以这样说,很多高级开发甚至都搞不不清楚JVM内存结构、JAVA内存结构、JAVA内存区域、Java内存模型这几个的概念及其...

Soinice的博客 3495

【Java】JVM内存结构

JVM 是一种虚拟计算机,负责加载、验证、解释/编译和执行 Java 字节码,并管理程序的内存、线程、垃圾回收等运行细节。项目JVM 的作用运行环境加载和执行 Java 字节码平台无关一次编写,到处运行内存管理管理对象分配和垃圾回收安全高效字节码验证 + JIT 优化Java 内存模型(JMM)是并发编程的核心基础,确保多线程下数据共享时的原子性、可见性、有序性,通过volatilefinal等关键字落地实现。特性问题解决关键字 / 工具是否 CPU 保证原子性操作不可中断。

weixin_46589153的博客 788

JVM详解——内存结构

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,具体实现有很多,以下内容如果不额外声明,默认是HotSpot JVM。JVM它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

eyes++的博客 4248

JVM内存结构———他的底层完整结构

线程私有(程序计数器、虚拟机栈、本地方法栈)+ 线程共享(堆、方法区)+ 堆外直接内存;核心区域定位:堆:对象存储中心(OOM 高发区);方法区:类元数据中心(JDK8+ 为元空间,本地内存);虚拟机栈:方法调用栈(栈溢出高发区);直接内存:IO 优化专用(堆外内存,需手动管理);对象在堆,类在方法区,方法调用在栈,IO 高效用直接内存;性能优化核心:堆和方法区的内存配置(XmsXmx)、直接内存的回收管理,是 JVM 优化的重点。

2403_87639585的博客 1297

JVM内存结构概述

本节将会介绍一下JVM的内存结构,JVM运行时数据区的各个组成部分:堆,方法区,程序计数器,Java虚拟机栈,本地方法栈,还会对Java堆的分代划分做个简单的介绍。 目录 前言 JVM是什么 JVM内存结构概览 运行时数据区 程序计数器 Java虚拟机栈 本地方法栈 方法区 运行时常量池 Java堆 直接内存 前言 JVM是Java中比较难理解和掌握的一部分,也是面试...

没头脑遇到不高兴 5026
上一篇: java重要知识点 JVM基本结构
下一篇: java的类加载机制详解
sevevty-seven
博客等级 码龄2年 757粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值