Java性能优化权威指南-读书笔记(三)-JVM性能调优-内存占用

新生代、老年代、永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集。

新生代不满足内存分配请求时,发生Minor GC,老年代、永久代不满足内存分配请求时,发生Full GC,Minor GC比Full GC持续的时间要短很多。

所以内存空间设置的不合理就会频繁引起垃圾收集,以及OutOfMemoryError错误,严重影响程序性能。

Java堆大小计算法则

若你的应用部署在单独的服务器,且该服务器上只有这一个应用,那Java堆肯定是越大越好,但这种情况比较少。

Java堆大小可以参考下面这个表格:

空间命令行选项占用倍数
Java堆-Xms:最小堆大小
-Xmx:最大堆大小
3~4倍Full GC后老年代空间占用
永久代-XX:PermSize
-XX:MaxPerSize
1.2~1.5倍Full GC后永久代空间占用
新生代-Xmn1~1.5倍Full GC后老年代空间占用
老年代Java堆大小 - 新生代大小2~3倍Full GC后老年代空间占用

其中这些空间占用,都是指应用程序在稳定状态(指应用运行了一段时间)下,Full GC后Java堆占用的空间大小,即活跃数据的大小。

参照下面这个GC日志:

12.251: 
[Full GC
[PSYoungGen: 15945K->0K(278528K)] 
[ParOldGen: 30724K->29331K(67072K)] 46670K->29331K(345600K), 
[PSPermGen: 34785K->34774K(1081344K)], 0.1022337 secs] 
[Times: user=0.20 sys=0.00, real=0.10 secs]

1). Java堆大小:29331K(约30M) * (3~4),即90M~120M

2). 永久代大小:34774K(约34M)* (1.2~1.5),即41M~51M

3). 新生代大小:29331K(约30M) * (1~1.5),即30M~45M

4). 老年代大小:(90M~120M) – (30M~45M),即60M~75M

这个计算法则,只是起到指导性的意见,实际操作中,还是需要根据实际情况来应变。

在调整后面两项“延迟、吞吐量”时,这些堆的大小还需要进一步的调整。

转载于:https://www.cnblogs.com/xiongpq/p/6129426.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值