JVM垃圾回收机制简介

开发 后端
JVM垃圾回收分多级,0级为全部(Full)的JVM垃圾回收,会回收OLD段中的垃圾;1级或以上为部分JVM垃圾回收,只会回收Young中的垃圾。

这里向大家描述一下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. 全面认识JVM垃圾回收机制
  2. 解决JVM最大内存设置问题
  3. JVM垃圾回收机制使用秘笈
  4. 详解Tomcat配置JVM参数步骤
  5. 深入学习JVM内存设置原理和调优
责任编辑:佚名 来源: i5tt.com
相关推荐

2010-09-25 15:26:12

JVM垃圾回收

2010-09-16 15:10:24

JVM垃圾回收机制

2021-11-05 15:23:20

JVM回收算法

2010-09-26 16:42:04

JVM内存组成JVM垃圾回收

2010-09-26 11:22:22

JVM垃圾回收JVM

2017-08-17 15:40:08

大数据Python垃圾回收机制

2017-03-03 09:26:48

PHP垃圾回收机制

2009-06-23 14:15:00

Java垃圾回收

2011-07-04 16:48:56

JAVA垃圾回收机制GC

2021-05-27 21:47:12

Python垃圾回收

2011-06-28 12:39:34

Java垃圾回收

2015-06-04 09:38:39

Java垃圾回收机

2017-06-12 17:38:32

Python垃圾回收引用

2010-10-13 10:24:38

垃圾回收机制JVMJava

2021-12-07 08:01:33

Javascript 垃圾回收机制前端

2009-12-09 17:28:34

PHP垃圾回收机制

2011-12-26 09:50:05

.NET垃圾回收

2024-02-22 17:15:22

JS垃圾回收机制

2010-09-26 14:08:41

Java垃圾回收

2017-10-12 12:41:11

PHP圾回收机制变量容器
点赞
收藏

51CTO技术栈公众号