JVM内存布局

【JVM系列】内存布局详解 熟悉 Java 语言特性的同学都知道,相比 C、C++ 等编程语言,Java 无需通过手动方式回收内存,内存中所有的对象都可以交给 Java 虚拟机来帮助自动回收;而像 C、C++ 等编程语言,需要开发者通过代码手动释放内存资源,否则会导致内存溢出。尽管如此,如果编程不当,Java 应用程序也可能会出现内存溢出的现象,例如下面这个异常!java代码解读复制代码它表示当前服务已出现内存溢出,简单的说就是当服务出现了内存不足时,就会抛异常。这种异常是怎么出现的呢?该如何解决呢? 阅读详情

JVM的主要组成:JVM包含俩个子系统和俩个组件,俩个子系统为Class loader(类装载)、Execution engine(执行引擎);俩个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。

其中运行时数据区就是我们Java常说的内存。

程序计数器(寄存器)

作用:记住下一条jvm指令的执行地址

特点:

  • 是线程私有的

  • 不会出现内存溢出

虚拟机栈:

是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

  • 栈-线程与运行需要的内存空间(方法运行所需 要的栈帧)

  • 每个线程运行所需的内存称为虚拟机栈

  • 每个线程由多个栈帧组成,对应着每次方法调用时所占用的内存

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

本地方法栈:

一个java调用非java代码的接口。一个Native Method是这样一个java方法:该方法的实现由非java语言实现。

堆:

定义:

heap(堆)

  • 通过new关键字创建的对象都会使用堆内存

特点:

  • 他是线程共享的,堆中的对象都需要考虑线程安全的问题

  • 由垃圾回收机制

方法区(“非堆”(Non-Heap)):

定义:

方法区(Method Area)与 Java 堆一样,是各个线程共享的内存区域,它用于存储 已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

在虚拟机启动时启动

组成

方法区内存溢出

1.8以后用的元空间(系统内存)

1.8以前用的永久代 垃圾回收效率低

场景:

  • spring

  • mybatis

运行时常量池

javap -v 文件名.class

查看反编译信息

运行时常量池(Runtime Constant Pool)是方法区的一部分。Class 文件中除了有类 的版本、字段、方法、接口等描述信息外,还有一项信息是常量池表(Constant Pool Table),用于存放编译期生成的各种字面量与符号引用,这部分内容将在类加载后存放 到方法区的运行时常量池中。

运行时常量池相对于 Class 文件常量池的另外一个重要特征是具备动态性,

直接内存

定义:

直接内存(Direct Memory)

并不是虚拟机运行时数据区的一部分,也不是《Java 虚 拟机规范》中定义的内存区域。但是这部分内存也被频繁地使用,而且也可能导致 OutOfMemoryError 异常出现

  • 常见于NIO操作时,用于数据缓冲区

  • 分配回收成本高

  • 不受JVM内存回收管理

JVM - 对象内存布局及访问 介绍JVM对象内存布局、对象创建流程及访问方式 阅读详情

相关推荐

JVM 内存布局深度解析,你所不知道的一面

首先,我们需要定义一个本地方法。这通常在C或C++中完成,并使用JNIEXPORT和Java_// 本地方法实现\n");通过本文,我们深入探究了 JVM 内存布局的方方面面。从最重要的堆内存,到方法区的元数据信息,再到虚拟机栈和本地方法栈中的线程私有区域,相信你现在对 JVM 的内存分配和管理有了全新的认识。不过,JVM内存管理远不止这些。比如上文中提到的垃圾收集器,它是如何判断对象是否需要回收?各种垃圾收集算法的优缺点是什么?分代收集器工作原理又是怎样的?

w风雨无阻w的专栏 1168

JVM内存模型以及垃圾回收

JVM内存模型以及垃圾回收 JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块,一块是 NEW Generation, 另一块是Old Generation. 在New Generation中,有一个叫Eden的空间,主要是用来存放新生的对象,还有两个S

交换一个思想,能得到俩思想 2796

精美图文带你掌握 JVM 内存布局

JVM 系列:本JVM系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握JVM相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习JVM知识,还是需要去阅读专业的书籍和文档。本文主题内容:内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略 ,保证了 JVM 的高效稳定运行。上图描述了当前比较经典的JVM内存布局。(堆区画小了2333,按理来说应该是最大的区域)如果按照线

weixin_70730532的博客 393

Java篇--JVM二(内存结构)

文章目录一、垃圾回收算法1.判定对象是否是垃圾的标准2.判定对象是否是垃圾的算法(1)引用计数算法(2)可达性分析算法3.谈谈你所了解的垃圾回收算法(1)标记-清除算法:Mark and Sweep(2)复制:Copying(3)标记-整理算法:(4)分代收集算法:二、垃圾收集器1.串行收集器:Serial Collector2.并行收集器:Parallel Collector3.并发收集器:Concurrent Collector 一、垃圾回收算法 1.判定对象是否是垃圾的标准 一个对象有没有被其他对象所

小强签名设计 的博客 368

锐浪报表 Grid++Report 子报表 Delphi

锐浪报表 Grid++Report 是国内较好的报表控件,本人一直使用它,做出很多特色的报表。可以说你的报表设计出来,它基本上能做出来。 但是它帮助文件上,说的不深,近期因为要做一个有关社工的报表,大表中,嵌套2个子表。可以说,一个表到三个数据集,分别打印。 在认真看了帮助的基础上,网上探索,基本无此类,特别是Delphi的帮助,几乎为零。经二天摸索,做出来了。 一、设计思路 1、大表和二个小表,可以设计为三个表,分别使用三个GridppReport控件,取名...

lyhoo163的专栏 9071

TikTok达人私信自动化:用Node.js和纯JavaScript实现WSS协议通信(附完整代码结构)

本文详细介绍了如何使用Node.js和WSS协议实现TikTok达人私信自动化系统。通过分层架构设计、WSS连接管理、消息加密策略及频率控制,开发者可以构建稳定高效的私信工具,突破平台API限制,适用于跨境电商和社交媒体运营场景。

weixin_30352645的博客 519

JVM系列之内存布局

概述JVM的体系结构, JVM包含两个子系统和两个组件,分别为ClassLoader:类装载子系统,根据给定的全限定类名来装载class文件到运行时数据区的方法区中,参考JVM系列之ClassLoader;Execution Engine:执行引擎子系统,执行class文件的指令;Runtime Data Area:运行时...

cnzzs的博客 840

Go语言AI智能体开发实战:基于LangGraphGo构建下一代工作流引擎

在AI应用开发领域,工作流编排是构建复杂智能系统的核心技术。其核心原理是将任务执行过程建模为状态图,通过节点和边的组合定义数据流转路径,实现多步骤推理与工具调用的自动化。这种基于状态图的编程模型,为智能体提供了清晰的“思考-行动-观察”循环抽象,显著提升了复杂业务逻辑的可维护性和可观测性。从技术价值看,它解决了传统代码中状态分散、流程僵化的问题,支持条件分支、并行执行等高级模式,是实现生产级AI应用的关键基础设施。在应用场景上,该技术广泛适用于客服机器人、自动化审批、数据ETL等需要多步骤协调的领域。本文以

weixin_30457551的博客 360

JVM 内存布局

我们先来说堆。堆是 OOM 故障最主要的发生区域。它是内存区域中最大的一块区域,被所有线程共享,存储着几乎所有的实例对象、数组。所有的对象实例以及数组都要在堆上分配,但是随着 JIT 编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化发生,所有的对象都分配在堆上也渐渐变得不是那么“绝对”了。Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC 堆”。从内存回收的角度来看,由于现在收集器基本都采用分代收集算法,所以 Java 堆中还可以细分为:新生代和老年代。

yuanmomoya的博客 1318

N32串口DMA接收不定长数据:空闲中断与DMA通道的协同处理

本文详细解析了在N32系列MCU中,利用串口空闲中断与DMA通道协同处理不定长数据的核心机制与实战方法。通过剖析空闲中断的触发时机、DMA的配置要点以及两者协同工作的关键时序,提供了避免数据错乱的避坑指南和完整的代码实现,旨在帮助开发者构建高效、可靠的嵌入式串口通信子系统。

weixin_29191669的博客 122

RK3568-MIPI屏幕调试实战:LCD初始化时序解析与转换

本文详细解析RK3568平台MIPI屏幕调试中的LCD初始化时序,重点介绍DCS Write与Generic Write数据类型的转换方法,并提供厂家时序到RK格式的实战转换案例。通过理解上电初始化时序的重要性,帮助开发者快速解决屏幕不亮、花屏等常见调试问题,提升RK3568硬件开发效率。

d6e7f8g9h的博客 186

JVM的内存布局

以上就是JVM的内存布局,不同的JVM实现可能会在细节上有所不同,但总体结构大致相同。了解JVM的内存布局对于性能调优和故障排查非常重要。Java虚拟机(JVM)的内存布局可以分为几个主要部分,每个部分都有特定的用途。

2301_80215285的博客 696

NR RRC协议(2)---RRC连接建立流程

RRC连接建立目的是建立SRB1 RRC连接建立还用于将初始NAS消息从UE传送到网络 RRC连接的初始阶段期间,不激活AS安全性 RRC连接建立由UE侧发起

crg2046的博客 1957

JVM(二)JVM内存布局

这几天我再次阅读了《深入理解Java虚拟机》之第二章“Java内存区域与内存溢出异常”,同时也参考了一些网上的资料,现在把自己的一些认识和体会记录一下。  (本文为博主原创文章,转载请注明出处) 一、概述 在网上看到很多的各种文章来写Java内存布局/Java内存模型(JMM)/Java内存分配和回收等。初学者,往往容易被搞混淆,这些东西到底都是些啥?讲的是不是同一个东西?如果不是同一个东西

airfish20000的博客 442

面试中常考的数学题——截木棍、圆上取点、赛马、红蓝墨水,测试毒药、坐到正确座位问题

文章目录1.将一根木棒截成三段,问能够组成三角形的概率;2.在圆上任取三点,问能够组成锐角、直角、钝角三角形的概率;3.共有25匹马,找出最快的3匹,只有5个赛道,每次比赛只能得到5匹马的速度排序,最少需要多少次比赛;4 有两瓶红蓝墨水,体积一样,现在从红墨水中舀一勺加入蓝墨水中,搅拌均匀后,在从蓝墨水中舀一勺加到红墨水中,试问这两瓶墨水哪瓶纯度更高。 1.将一根木棒截成三段,问能够组成三角形的概率; 来源:https://blog.youkuaiyun.com/weixin_41245919/article/deta

weixin_41558411的博客 4904

什么是信噪比?信噪比越大好还是越小好?

在进行声音增强的时候,往往需要考虑声音信号和噪声的信噪比,那么信噪比是什么呢?越大越好还是越小越好,此处引入百度百科的解读: 信噪比,英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO),又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例。这里面的信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外信号(或信息),并且该种信号并不随原信号的变化而变化。 同样是“原信号不存在”还有一种东西叫“失真”,失真和噪声实际上有一

码匀的博客 7万+

JVM运行时内存布局

JVM运行时内存布局 1 JVM的内存区域布局 java代码的执行步骤有三点 java源码文件->编译器->字节码文件 字节码文件->JVM->机器码 机器码->系统CPU执行 JVM执行的字节码需要用类加载来载入;字节码文件可以来自本地文件,可以在网络上获取,也可以实时生成。就是说你可以跳过写java代码阶段,直接生成字节码交由JVM执行 其中Java虚拟机栈、程序计数器、Heap、本地方法栈、Metaspace属于JVM运行时的内存;按是否线程共享则可以分两类 JAVA堆和

hell0_W0rld4396的博客 412

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

基础篇:JVM运行时内存布局

JAVA运行内存和JAVA内存模型

潜行前行的专栏 3964

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JVM之内存布局

目录 一、引言 二、经典JVM内存布局 1.Heap(堆区) 2.Metaspace(元空间) 3.JVM Stack(虚拟机栈) 4.Native Method Stacks(本地方法栈) 5.Program Counter Register(程序计数寄存器) 三、线程共享角度的内存结构 一、引言 内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和...

绣花针 495

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JVM - 内存布局

JVM内存区域划分布局详解~~ 堆跟方法区是只有一份的 每个线程,都有自己的栈.每个线程也都有自己的程序计数器~~ 堆: 里面放的就是new的对象~ 方法区: 里面放的就是类对象~ 类的static成员,作为类属性 同样也是在类对象中,也就是在方法区里~ 类对象里有啥: 1.包含了这个..

qq_57314342的博客 456

JVM之内存布局超详细整理

  内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和立用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来学习一 下经典的JVM内存布局。   话不多说,先来一图(截图来至阿里的<码出高效:java开发手册>)。上图就...

mayfly_hml的博客 1158

JVM—内存布局

1.JVM内存布局组成: 包含堆区(Heap),元数据区(Metaspace),虚拟机栈(JVM Stack),本地方法栈(Native Method Stacks),程序计数器(Program Counter Register) 2.堆(Heap): 1)概括说包含了新生代和老年代,其中新生代又包含了Eden, Survivor(from, to)。每次Minor GC,会将Eden和Survivor from中存活的对象复制到Survivor to中。 2)晋升老年代条件是age为15,大对象直

chenkaibsw的专栏 1302

【jvm】对象的内存布局

1.并不是每个对象都有这部分,但JVM可能会在对象的末尾添加一些填充字节(Padding Bytes),以确保对象的大小是某个字节的倍数(通常是8字节)。2.对象的内存布局在JVM内部进行优化,以提高性能。1.对象的实际内存布局和大小可能受到JVM实现、JVM参数(如是否启用压缩指针)、操作系统、硬件架构等多种因素的影响。3.使用JVM提供的工具(如jmap、jhat、VisualVM等)可以帮助分析对象的内存使用情况。1.存储对象的字段(Field)信息,包括从父类继承的字段和自己定义的字段。

王佑辉的博客 730
上一篇: 类加载子系统
下一篇: JVM面试总结
Array_new
博客等级 码龄5年 5粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Array_new

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值