• 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

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

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

  • 相关阅读:
    Spark Sort-Based Shuffle具体实现内幕和源码详解
    Spark-2.0原理分析-shuffle过程
    Spark Shuffle 中 JVM 内存使用及配置内幕详情
    Spark中的Spark Shuffle详解
    Spark Shuffle Write阶段磁盘文件分析
    Spark Sort Based Shuffle内存分析
    Spark Storage(二) 集群下的broadcast
    Spark SQL metaData配置到Mysql
    TweenJS----前端常用的js动画库,缓动画和复制动画的制作,效果非常好。
    Storm入门
  • 原文地址:https://www.cnblogs.com/xiongpq/p/6129426.html
Copyright © 2020-2023  润新知