温馨提示×

温馨提示×

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

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

如何解决JVM空闲堆内存不释放回OS的问题

发布时间:2021-10-23 16:31:27 来源:亿速云 阅读:2401 作者:柒染 栏目:大数据

今天就跟大家聊聊有关如何解决JVM空闲堆内存不释放回OS的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

JDK 8及更早版本

在这些版本中,没有用于立即回收的显式选项,但是您可以通过进行设置来使GC一般更具侵略性,该设置-XX:GCTimeRatio=19 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=30将使其在GC后花费更多的CPU时间来收集和限制已分配但未使用的堆内存的数量。循环。

如果使用并发收集器,还可以将-XX:InitiatingHeapOccupancyPercent=NN设置为一个较低的值,以使GC几乎连续运行并发收集,这将消耗更多的CPU周期,但会更快地缩小堆。通常这不是一个好主意,但是在某些类型的具有大量备用CPU内核但内存不足的计算机上,这是有道理的。

如果您使用的是G1GC,请注意,它仅使用jdk8u20获得了在堆中间退还未使用的块的功能,而早期版本只能在堆末尾返回块,这对可装载的块数量有很大的限制。收回。

如果您使用的收集器具有默认的暂停时间目标(例如CMS或G1),则您也可以放宽该目标,以对收集器施加更少的约束,或者您可以切换并行收集器,以在暂停时间上优先考虑占用空间。

为了验证是否发生收缩或诊断GC决定不收缩的原因,您可以使用GC Logging-XX:+PrintAdaptiveSizePolicy来提供见解,例如,当JVM尝试为年轻一代使用更多内存以满足某些目标时。

JDK 9

添加了-XX:-ShrinkHeapInSteps可用于更积极地应用由上一节中提到的选项引起的缩小的选项。相关的OpenJDK错误。

对于日志记录-XX:+PrintAdaptiveSizePolicy已被替换为-Xlog:gc+ergo

JDK 12

引入了通过G1PeriodicGCInterval(JEP 346)为G1GC启用即时内存释放的选项,但又以一些额外的CPU为代价。JEP还提到了Shenandoah和OpenJ9 VM中的类似功能。

如果您使用G1收集器并偶尔调用System.gc()(我每分钟执行一次),则Java将可靠地收缩堆并将内存返还给OS。

从Java 12开始,如果应用程序处于空闲状态,则G1会自动执行此操作。

我建议将这些选项与以上建议结合使用,以实现非常紧凑的驻留进程大小:

-XX:+UseG1GC -XX:MaxHeapFreeRatio=30 -XX:MinHeapFreeRatio=10

JDK 13

ZGC在13 Java中发布,它可以将未使用的堆内存返回给操作系统,请参阅链接

看完上述内容,你们对如何解决JVM空闲堆内存不释放回OS的问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

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

jvm
AI