zoukankan      html  css  js  c++  java
  • 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后永久代空间占用
    新生代 -Xmn 1~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

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

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

  • 相关阅读:
    DP(动态规划)学习心得
    hloj#402 护卫队解题讨论
    hloj#168“倒牛奶”解题讨论
    贪心:畜栏预定
    区间问题
    离散化
    差分
    浏览器的工作原理幕后揭秘的部分笔迹摘要
    python之阶乘的小例子
    关于python中urllib.urlencode的时候出错:UnicodeEncodeError: ‘ascii’的记录
  • 原文地址:https://www.cnblogs.com/xiongpq/p/6129426.html
Copyright © 2011-2022 走看看