jvm内存释放给os

背景:

1、一台服务器总内存46g,某一个在线定时任务是每天凌晨1点执行,大约耗时2个小时,高峰期会占用15g左右的内存,其他时间基本不消耗内存,但是由于jvm使用了默认的垃圾回收器(Parallel Scavenge + Parallel Old),导致即使堆内存使用率很低,该服务依然会占用15g的内存,且不会释放给os

2、同一台服务器上,白天可能会执行其他任务

3、所以需要实现:在该任务空闲后,释放出不需要的内存给os

实现:

经过查阅相关资料后发现在java8的基础上配合以下几个参数可以实现空闲时内存释放;空闲时由原来的占用15g内存变为现在的占用2g内存,符合预期效果

1、在合适的时机主动释放内存
System.gc()
2、在启动参数上加上以下几个配置,指定堆最大和最小内存,同时指定使用G1垃圾回收器
-Xms2G -Xmx20G -XX:+UseG1GC

如果需要还可以加上

1、堆最大空闲率,超过这个值,jvm会释放内存给os
-XX:MaxHeapFreeRatio
2、堆最小空闲率,低于这个值,jvm会扩展内存
-XX:MinHeapFreeRatio

参考:

java8官方文档

运维:你们 JAVA 服务内存占用太高,还只增不减!告警了,快来接锅

Does GC release back memory to OS?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值