JVM内存调优原则及几种JVM内存调优方法

本文探讨了JVM内存调优的原则和方法,强调了避免过度GC和Full GC的重要性,以及如何调整新生代和旧生代的比例。通过使用JConsole和Java VisualVM等工具,以及设置如-XX:MaxTenuringThreshold、-XX:GCTimeRatio和-XX:MaxGCPauseRatio等参数,可以有效优化JVM内存管理,提高系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何对JVM进行内存调优?调优需要遵从什么样的原则或者说方法?下面我们来说叨说叨,希望能帮到大家,同时自己也学习记录。
在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。
对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源(主要是CPU),影响系统的吞吐量。特别要关注Full GC,因为它会对整个堆进行整理,导致Full GC一般由于以下几种情况:
一、导致Full GC一般由于以下几种情况

1、旧生代空间不足
  调优时尽量让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象
2、Pemanet Generation空间不足
  增大Perm Gen空间,避免太多静态对象
  统计得到的GC后晋升到旧生代的平均大小大于旧生代剩余空间
  控制好新生代和旧生代的比例
3、System.gc()被显示调用
  垃圾回收不要手动触发,尽量依靠JVM自身的机制

二、主要的调优手段

调优手段主要是通过控制堆内存的各个部分的比例和GC策略来实现,内存比例不良设置会导致一下不良后果:
1). 新生代设置过小
  一是新生代GC次数非常频繁,增大系统消耗;二是导致大对象直接进入旧生代,占据了旧生代剩余空间,诱发Full GC
2). 新生代设置过大
  一是新生代设置过大会导致旧生代过小(堆总量一定),从而诱发Full GC;二是新生代GC耗时大幅度增加
  一般说来新生代占整个堆1/3比较合适
3). Survivor设置过小
  导致对象从eden直接到达旧生代,降低了在新生代的存活时间
4). Survivor设置过大
  导致eden过小,增加了GC频率。
  另外,通

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值