JVM原理(四):内存优化

一、监控工具

    包括jdk的命令行工具和可视化工具。

1、命令行工具


2、可视化工具

  • JConsole
  • VisualVM

JSonsole:在JDK/bin目录下




VisualVM需要下载安装


二、Trace跟踪参数

1、打印GC详细信息

        -XX:+PrintGCDetails 

   

2、GC前和GC后,打印堆信息

      -XX:+PrintHeapAtGC

3、打印CG发生的时间戳

    -XX:+PrintGCDateStamps

    -XX:+PrintGCTimeStamps

4、配置GC日志文件

    -Xloggc:log/gc.log  输出日志到项目log文件夹中

三、堆的分配参数

1、-Xmx –Xms指定最大堆和最小堆(初始化堆)

    例如:-Xmx20m -Xms5m
    堆最大空间为20m,初始化为5m

    JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的大小。

2、-Xmn、-XX:NewRatio、-XX:SurvivorRatio  新生代老年代配置
    
  • -Xmn

    设置新生代大小

  • -XX:NewRatio

    新生代(eden+2*s)和老年代(不包含永久区)的比值

        例如:-XX:NewRatio=4,表示新生代:老年代=1:4,即新生代占整个堆的1/5

  • -XX:SurvivorRatio(幸存代)

    设置两个Survivor区和eden的比值

        例如:-XX:SurvivorRatio=8,表示两个Survivor:eden=2:8,即一个Survivor占年轻代的1/10

3、-XX:PermSize  -XX:MaxPermSize 非堆内存(方法区或永久代)配置初始空间和最大空间

     JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4

4、-XX:PretrnureSizeThreshold  进入老年代的年龄值

    默认为15

四、异常处理

1、OutOfMemory

    -Xmx 不指定或者指定偏小

2、OutOfMemoryError: PermGen space 

    XX:MaxPermSize设置过小

五、性能优化

    性能优化需要根据GC的日志动态调整堆的配置参数,做到尽量减少Full GC和Minor GC(Full GC由于效率低优先级更高)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值