JVM垃圾回收机制简介

本文介绍了JVM垃圾回收机制的分级与工作流程,包括不同级别的垃圾回收如何处理Young、Old和Perm段内存,以及内存分配与回收的具体步骤。同时提供了Java堆相关参数配置示例。

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

这里向大家描述一下JVM垃圾回收机制的概念,JVM垃圾回收分多级,1级或以上为部分JVM垃圾回收,只会回收Young中的垃圾,内存溢出通常发生于OLD段或Perm段JVM垃圾回收后,仍然无内存空间容纳新的Java对象的情况。

JVM垃圾回收简介:

JVM垃圾回收分多级,0级为全部(Full)的JVM垃圾回收,会回收OLD段中的垃圾;1级或以上为部分JVM垃圾回收,只会回收Young中的垃圾,内存溢出通常发生于OLD段或Perm段JVM垃圾回收后,仍然无内存空间容纳新的Java对象的情况。

当一个URL被访问时,内存申请过程如下:

A.JVM会试图为相关Java对象在Eden中初始化一块内存区域

B.当Eden空间足够时,内存申请结束。否则到下一步

C.JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的JVM垃圾回收);释放后若Eden空间仍然不足以放入新对象,则试图将部分

Eden中活跃对象放入Survivor区/OLD区

D.Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区

E.当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)

F.完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现"outofmemory错误"。下面看一下JVM垃圾回收机制的Java堆的相关参数。

Java堆相关参数:

ms/mx:定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的YOUNG+OLD内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

NewSize/MaxNewSize:定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

PermSize/MaxPermSize:定义Perm段的尺寸,PermSize为JVM启动时Perm的内存大小;MaxPermSize为最大可占用的Perm内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

SurvivorRatio:设置Survivor空间和Eden空间的比例

例:

  1.  
  2.  
  3. MEM_ARGS="-Xms512m-Xmx512m  
  4. -XX:NewSize=256m-XX:MaxNewSize=256m 
  5. -XX:PermSize=128m-XX:MaxPermSize=128m 
  6. -XX:SurvivorRatio=6"  

在上面的例子中:

  1. YOUNG+OLD:512M  
  2. YOUNG:256M  
  3. Perm:128M  
  4. Eden:YOUNG*6/(6+1+1)=192M  
  5. Survivor:YOUNG/(6+1+1)=32M  
  6.  

Java堆的总尺寸=YOUNG+OLD+Perm=640M

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值