JVM中垃圾回收的判定标准和内存相关参数介绍

发布时间:2021-09-06 17:56:32 作者:chen
来源:亿速云 阅读:164

这篇文章主要讲解了“JVM中垃圾回收的判定标准和内存相关参数介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM中垃圾回收的判定标准和内存相关参数介绍”吧!

JVM中垃圾回收的判定标准

最终目的是将内存中无用的对象回收掉。具体的判定方法有:

JVM中内存相关参数

注:通常情况下,Xms和Xmx,-XX:PermSize和-XX:MaxPerSize都会设置为一样。

上面看不懂的参数不要深究,等下提到回过头再来看,这里只是将所有参数罗列出来方便查找。

JVM中的内存分代模型

JVM中,将对象在内存中分为了三代:

为什么要分代勒,因为针对每个年龄代,都有不同的垃圾回收算法,以及内存分配机制。如果将所有对象放在一起,第一是会造成频繁遍历判断回收的开销,第二是会造成复制、移动的开销,为什么会有复制、移动,因为回收内存必然会造成内存碎片,而内存碎片会导致空间浪费,所以必须通过复制、移动来清理随便,使得空闲内存连续。

JVM中具体的内存分配模型

JVM中垃圾回收的判定标准和内存相关参数介绍

如上图,至于年轻代为什么要如此分配,与特定的回收算法有关。

对象在内存分代中如何流转

年轻代

大部分对象刚创建的时候都会分配在年轻代的Eden区,只要年轻代空间不够就会触发MinorGC(只回收年轻代内存),minorGC采取复制算法进行回收,当JVM运行触发第一轮minorGC时,会将eden区存活的对象先复制到一个suprivor区。然后删除eden区对象,当触发下一轮minorGC时,又把suprivor区和eden区的存活的对象转移到另一个suprivor区,然后删除这两个区的所有对象。依次类推。至于为什么要用复制算法,包括老年代的标记整理算法,这是考虑到了避免内存碎片。如果对象内存不连续,会造成很多的空间浪费。

老年代

老年代的对象都是从年轻代根据一定的规则流转过来的。 具体有几类流转方式:

永久代

永久代存放的是元数据信息,当类加载时,类元数据信息写入永久代,fullGC时永久代数据被回收,回收条件是:该类所有实例对象所有已经从堆内存被回收,该类classLoader已经被回收,该类Class对象没有任何引用。

附图:

JVM中垃圾回收的判定标准和内存相关参数介绍

谈一个JVM优化实例

现一个日处理量上亿数据的计算系统,不断从Mysql和其他数据中间件中提取数据进行计算处理。每分钟执行500次数据提取和计算任务,每次任务处理耗时10秒,每次处理1万条数据(每条数据20个字段),但是集群部署,共5台机器,1台机器每分钟处理100次任务,每台机器是4核8G内配置,JVM分了4G,3G堆内存,1.5G年轻代,1.5G老年代。

JVM中垃圾回收的判定标准和内存相关参数介绍

我们先来估算一下内存占用:

实际生产环境是怎么样的勒?

JVM中垃圾回收的判定标准和内存相关参数介绍

每个任务处理10S,意味着还有大概六分之一的数据应该存活,算200M,但是200M放不进Survivor区,所以会尝试往老年代放,老年代现在大于1.2G所以直接放就是了。

JVM中垃圾回收的判定标准和内存相关参数介绍

此时老年代可用容量小于年轻代对象总内存,默认判断老年代剩余空间是否大于平均每次MinorGC转移过来的老年代对象容量,这里是大于,所以还是继续MInorGC。

JVM中垃圾回收的判定标准和内存相关参数介绍

此时会触发FullGC清理老年代,于是老年代的对象被全部清理掉了:

JVM中垃圾回收的判定标准和内存相关参数介绍

优化策略

此时一个Survivor区有200MB,每次MinorGC后都能存放的下存活对象,不用往老年代转移(当然还是有转移,这只是避免了suprivor区过小被迫转移的对象)。JVM优化的策略最核心的就是减少FullGC次数,因为扫描对象多了一个老年代和永久代、永久代标记算法略微复杂、老年代整理时由于对象较多比较慢的原因,FullGC效率是远远低于MinorGC的,一般时间是minorGC的10倍以上。

感谢各位的阅读,以上就是“JVM中垃圾回收的判定标准和内存相关参数介绍”的内容了,经过本文的学习后,相信大家对JVM中垃圾回收的判定标准和内存相关参数介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. JVM内存区域和垃圾回收的
  2. JVM中本机内存跟踪的实例介绍

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jvm

上一篇:css中Padding与line-height的区别有哪些

下一篇:docker容器中查找镜像的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》