jvm内存以及gc浅见

这里写图片描述

java虚拟机内存包括两部分:新生代和来年代,其中新生代包含Eden和两个Survivor,Eden和survivor的大小比例为8:1,创建对象首先分配在Eden和其中一个survivor(假定是survivor1),survivor2是备用的内存区域,在垃圾回收的时候会用到;当新生代内存不足分配空间创建对象,就会触发minor gc开始垃圾回收;垃圾回收步骤如下:

  1. 将Eden和survivor1中存活的对象复制到备用的survivor2,回收完后,survivor1就变成备用的内存区域
  2. 当gc后,备用内存区域空间不足以存下Eden和survivor1中存活的对象,则这些对象会直接移动到老年代
  3. 当某个对象在垃圾回收的时候频繁在survivor1和survivor2中来回复制(也就是说长久存活的对象),达到一定次数后该对象会被复制到来年代

当老年代内存不够用的时候就会触发full gc,full gc会中断线程,如果任务进程出现full gc,就需要进行内存调优了
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5,适当调小这个值,增大survivor的内存大小,这就能减少备用内存区域存不下存活对象,而导致将对象移至老年代的情况

这里列举的参数有限,可以参考下:https://blog.csdn.net/kidoo1012/article/details/54599046

个人觉得如果对java虚拟机调优有深入理解的话,可以适当调优;不过最好在代码层面上做下优化,例如减少大对象,避免过度使用内存空间,能够使用int就不用string,能够使用数组,就尽量不要用集合等等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值