JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

Hotspot 垃圾回收之EdenSpace 源码解析 目录 一、GenSpaceMangler 1、定义 2、check_mangled_unused_area /check_mangled_unused_area_complete 3、mangle_unused_area /mangle_unused_area_complete /mangle_region 二、ContiguousSpace 1、定义 2、构造方法 /... 阅读详情
 

JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

标签: jvm java 虚拟机
11348人阅读  评论(0)  收藏  举报
  分类:

JVM区域总体分两类,heap区和非heap区。 
heap区又分为: 
- Eden Space(伊甸园)、 
- Survivor Space(幸存者区)、 
- Old Gen(老年代)。

非heap区又分: 
- Code Cache(代码缓存区); 
- Perm Gen(永久代); 
- Jvm Stack(java虚拟机栈); 
- Local Method Statck(本地方法栈);

下面我们对每一个内存区域做详细介绍。 
Eden Space字面意思是伊甸园,对象被创建的时候首先放到这个区域,进行垃圾回收后,不能被回收的对象被放入到空的survivor区域。

Survivor Space幸存者区,用于保存在eden space内存区域中经过垃圾回收后没有被回收的对象。Survivor有两个,分别为To Survivor、 From Survivor,这个两个区域的空间大小是一样的。执行垃圾回收的时候Eden区域不能被回收的对象被放入到空的survivor(也就是To Survivor,同时Eden区域的内存会在垃圾回收的过程中全部释放),另一个survivor(即From Survivor)里不能被回收的对象也会被放入这个survivor(即To Survivor),然后To Survivor 和 From Survivor的标记会互换,始终保证一个survivor是空的。

这里写图片描述 
Eden Space和Survivor Space都属于新生代,新生代中执行的垃圾回收被称之为Minor GC(因为是对新生代进行垃圾回收,所以又被称为Young GC),每一次Young GC后留下来的对象age加1。

注:GC为Garbage Collection,垃圾回收。

Old Gen老年代,用于存放新生代中经过多次垃圾回收仍然存活的对象,也有可能是新生代分配不了内存的大对象会直接进入老年代。经过多次垃圾回收都没有被回收的对象,这些对象的年代已经足够old了,就会放入到老年代。

当老年代被放满的之后,虚拟机会进行垃圾回收,称之为Major GC。由于Major GC除并发GC外均需对整个堆进行扫描和回收,因此又称为Full GC。

heap区即堆内存,整个堆大小=年轻代大小 + 老年代大小。堆内存默认为物理内存的1/64(<1GB);默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制,可以通过MinHeapFreeRatio参数进行调整;默认空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制,可以通过MaxHeapFreeRatio参数进行调整。

下面我们来认识下非堆内存(非heap区) 
Code Cache代码缓存区,它主要用于存放JIT所编译的代码。CodeCache代码缓冲区的大小在client模式下默认最大是32m,在server模式下默认是48m,这个值也是可以设置的,它所对应的JVM参数为ReservedCodeCacheSize 和 InitialCodeCacheSize,可以通过如下的方式来为Java程序设置。

-XX:ReservedCodeCacheSize=128m
   
  • 1

CodeCache缓存区是可能被充满的,当CodeCache满时,后台会收到CodeCache is full的警告信息,如下所示: 
“CompilerThread0” java.lang.OutOfMemoryError: requested 2854248 bytes for Chunk::new. Out of swap space?

注:JIT编译器是在程序运行期间,将Java字节码编译成平台相关的二进制代码。正因为此编译行为发生在程序运行期间,所以该编译器被称为Just-In-Time编译器。

Perm Gen全称是Permanent Generation space,是指内存的永久保存区域,因而称之为永久代。这个内存区域用于存放Class和Meta的信息,Class在被 Load的时候被放入这个区域。因为Perm里存储的东西永远不会被JVM垃圾回收的,所以如果你的应用程序LOAD很多CLASS的话,就很可能出现PermGen space错误。默认大小为物理内存的1/64。


    JVM调优篇 点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人。 文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。 基础概念 一般JVM调优,重点在于调整JVM堆大小、调整垃圾回收器 JVM调优常用参数 -Xmx1024m:最大堆内存,当物理内存不超过192m时最大堆内存为物理内存的一半,否则为物理内存的四分一 -Xms1024m:最小堆内存,一般设置为与-Xmx同等值 jcmd:专用于查看JVM状态,可以查看正在运行的进程,会显示出进程号 jmap -heap 10864:查看进程号为. 阅读详情

    相关推荐

    关于 JVM 的内存模型

    类加载器是一个用来加载类文件的类。Java 源代码通过 javac 编译器编译成类文件。然后 JVM 来执行类文件中的字节码来执行程序。类加载器负责加载文件系统、网络或其他来源的类文件。实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。...

    ZHAOHUODIAN888的博客 677

    五、JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

    一、JVM区域总体概述: JVM区域总体分两类,heap区和非heap区。 1、heap区又分为: - Eden Space(伊甸园)、 - Survivor Space(幸存者区)、 - Old Gen(老年代)。 2、非heap区又分: - Code Cache(代码缓存区); - Perm Gen(永久代); - Jvm Stack(Java虚拟机栈); ...

    BearStarX的博客 1436

    CTF全能工具箱ProV2:集成AI与94GB离线资源库,打造无网环境下的智能解题流水线

    CTF全能工具箱ProV2是一款专为线下CTF比赛设计的All-in-One离线解决方案。它集成了94GB的庞大离线资源库,涵盖Web、逆向、Pwn等全方向工具链与知识库,并创新性地内置了本地AI大模型,可在断网环境下提供智能解题辅助,实现从信息收集到漏洞利用的智能流水线作业,极大提升比赛效率。

    weixin_29240343的博客 422

    java old gen_JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)...

    JVM区域总体分两类,heap区和非heap区。heap区又分为:- Eden Space(伊甸园)、- Survivor Space(幸存者区)、- Old Gen(老年代)。非heap区又分:- Code Cache(代码缓存区);- Perm Gen(永久代);- Jvm Stack(java虚拟机栈);- Local Method Statck(本地方法栈);下面我们对每一个内存区域做详细...

    weixin_39902085的博客 1072

    PDPS16.0单机版与SPLMLicenseServer授权避坑指南:从安装到冲突解决

    本文详细解析了PDPS16.0单机版的安装与授权流程,重点阐述了如何正确配置SPLMLicenseServer本地许可证服务器以实现软件激活。针对安装过程中常见的许可证冲突问题,提供了清晰的排查思路和解决方案,并介绍了通过设置环境变量等替代授权方法,帮助用户高效避坑,确保Tecnomatix Process Simulate顺利运行。

    weixin_29231221的博客 563

    LSTM 双向 Bi-LSTM

    LSTM 双向 Bi-LSTM

    jacke121的专栏 1516

    java eden space_JVM虚拟机20:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)...

    1.内存区域划分根据我们之前介绍的垃圾收集算法,限定商用虚拟机基本都采用分代收集算法进行垃圾回收。根据对象的生命周期的不同将内存划分为几块,然后根据各块的特点采用最适当的收集算法。大批对象死去、少量对象存活的,使用复制算法,复制成本低;对象存活率高、没有额外空间进行分配担保的,采用标记-清除算法或者标记-整理算法。从上面的图可以看出, JVM区域总体分两类,heap区和非heap区。1.heap区...

    weixin_36028342的博客 205

    PON架构(全光网络)

    目前组网架构世界上有一种最快的速度又是光,以前传统以太网络规划满足不了现在的需求。有线网 无线网 全光网络方案场景 全光网络分类 以太全光网络 PON(Pas-sive-Optical Network 无源光网络) 再典型的中大型高校网络中 推荐万兆入室 千兆到桌面的带宽设计 一般三层 (终端-接入层-汇聚层-核心层-出口(安全设备)-互联网) 单校区核心设备 一般采用两台高性能的核心交换机 双机的方式采用的是 M-LAG 多校区之间核心交换机采用1

    qq_56248592的博客 6269

    java eden space_JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)...

    JVM区域总体分两类,heap区和非heap区。heap区又分为:Eden Space(伊甸园)、Survivor Space(幸存者区)、Old Gen(老年代)。非heap区又分:Code Cache(代码缓存区);Perm Gen(永久代);Jvm Stack(java虚拟机栈);Local Method Statck(本地方法栈);下面我们对每一个内存区域做详细介绍。Eden Space字...

    weixin_39528843的博客 499

    在ARM平台上使用Anbox和LXC进行ARM开发调试

    在ARM平台上使用Anbox和LXC进行ARM开发调试是一种强大的工具组合。通过安装和配置Anbox和LXC,以及在LXC容器中运行ARM应用程序,开发人员可以方便地进行ARM开发和调试。LXC(Linux容器)是一种轻量级虚拟化技术,它提供了一种在单个主机上运行多个独立的Linux容器的方法。我们将讨论安装和配置Anbox和LXC,以及如何在容器中运行ARM应用程序。通过上述步骤,你现在可以在LXC容器中运行ARM应用程序,并使用Anbox在ARM平台上进行开发和调试。步骤2:启动LXC容器。

    KwmGroovy的博客 735

    资产会计 Transaction Type 与业务交易的 Post to Affiliated Company 不一致导致的 AAPO176:成因剖析与修复指引

    本文解析了SAP资产会计中常见的"AAPO176"错误提示,指出当交易类型(TType)与业务交易(Business Transaction)的"关联公司过账"(Post to Affiliated Company)标志不一致时,系统会拒绝过账。作者详细说明了该标志的作用机制,并提供了四种解决方案:修正交易类型使用、匹配正确的业务交易、调整系统配置或建立映射关系。文章还通过实际案例展示了配置错误对集团合并报表的影响,并附带了用于检查配置一致性的ABAP脚本。该错误通常

    2007 年 ~ 2025 年,深耕 SAP 技术 18 年 394

    JVM虚拟机:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

    1.内存区域划分 根据我们之前介绍的垃圾收集算法,限定商用虚拟机基本都采用分代收集算法进行垃圾回收。根据对象的生命周期的不同将内存划分为几块,然后根据各块的特点采用最适当的收集算法。大批对象死去、少量对象存活的,使用复制算法,复制成本低;对象存活率高、没有额外空间进行分配担保的,采用标记-清除算法或者标记-整理算法。 从上面的图可以看出, JVM区域总体分两类,heap区和非heap区。 1.heap区又分为: Eden Space(伊甸园)、 Survivor Space(幸存者区)、 Old

    子冉冰清的博客 2513

    SAP GUI 经典事务在 Fiori Launchpad 中的穿越之道:原理、配置与实践指南

    在许多企业的 S/4HANA 或 ECC 系统里,经典 SAP GUI 事务依旧承载着关键业务。如何把这些老将自然地嵌入到 Fiori Launchpad,让用户在统一入口里无缝切换新旧 UI,是项目中经常遇到的主题。本文结合社区博文、官方文档与实际项目经验,系统梳理这一过程的技术原理、配置步骤、性能优化以及常见坑点,并给出贴近中国读者的案例解析与改进建议。阅读完毕,你将不仅知道怎么做,还会理解。

    2007 年 ~ 2025 年,深耕 SAP 技术 18 年 623

    JVM内存区域详解(Eden Space Survivor Space Old Gen Code Cache和Perm

    JVM内存区域详解(Eden Space Survivor Space Old Gen Code Cache和Perm

    qq_43679849的博客 262

    【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

    【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od,

    KJ.JK 218

    廖雪峰Python教程[完整版]

    廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

    java old区域_JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)...

    JVM区域总体分两类,heap区和非heap区。heap区又分为:Eden Space(伊甸园)、Survivor Space(幸存者区)、Old Gen(老年代)。非heap区又分:Code Cache(代码缓存区);Perm Gen(永久代);Jvm Stack(java虚拟机栈);Local Method Statck(本地方法栈);下面我们对每一个内存区域做详细介绍。Eden Space字...

    weixin_30582943的博客 1180

    文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

    主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

    上一篇: Java NIO:IO与NIO的区别
    下一篇: @responseBody注解的使用
    javaPie
    博客等级 码龄16年 1171粉丝 43原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

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

    抵扣说明:

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

    余额充值