初探JVM堆内存

本文探讨了JVM管理的内存中最重要的部分——堆内存。堆内存是所有线程共享的区域,主要用于分配大部分对象的内存空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java虚拟机在运行Java程序的时候会将其内存划分为好几个不同的数据区域。

对大多数应用来说,堆内存应该是虚拟机管理的内存中最大的一块。java堆是可以被线程共享的区域,几乎所有的对象都在堆上进行内存空间的分配.


堆内存被划分成3块: 
1.永久代 JVM的方法区
用于存放静态类型数据,该块对垃圾回收没有什么影响。
2.新生代
所有新建的对象首先存放在新生代,目的在与尽快回收那些生命周期短的对象。
新生代主要由Eden和Survivor Space构成, 大小统过-Xmn指定, 一般将Survivor区分成S1,S2两块。Eden与Survivor Space的默认比例为8:1:1, 可以通过-XX:SurvivorRatio指定。
3.老年代
在新生代中经历了N个周期还没被回收的对象就会被复制到老年代,因此可以认为存放的都是一些生命周期较长的对象。


当对象在新生代存活次数超过上限时(可通过-XX:MaxTenuringThreshold配置, 对象存活的次数)就会被复制到老年代。相当于是Eden+某个S中存活下来的对象大于另一个S中的空间, 新生代中的对象就会被复制到老年代。


根据Java虚拟机规范的规定,Java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。在JVM运行时,可以通过配置以下参数改变整个JVM堆的配置比例。


1.JVM运行时堆的大小


  -Xms堆的最小值


  -Xmx堆空间的最大值


2.新生代堆空间大小调整


  -XX:NewSize新生代的最小值


  -XX:MaxNewSize新生代的最大值


  -XX:NewRatio设置新生代与老年代在堆空间的大小


  -XX:SurvivorRatio新生代中Eden所占区域的大小


3.永久代大小调整


  -XX:MaxPermSize
不管以什么形式来划分堆,其储存的都是对象实例,划分的目的也是为了更好的回收内存或更快的分配内存。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值