• jvm调优


    1.设置堆内存的初始大小512m,设置堆内存最大大小2048m

    java -Xms512m -Xmx2048m TestJVM

    2.-XX参数

     1)禁用手动GC操作

    java -XX:+DisableExplicitGC TestJVM

     2)设置老年代和新生代的比值

    java -XX:NewRatio=1 TestJVM

     3)运行java命令时打印参数

    java -XX:+PrintFlagsFinal -XX:+VerifySharedSpaces -version

     其中 = 和 :=分别代表默认值和被修改的值

    4)打印垃圾回收的详细信息

    -XX:+PrintGCDetails

    5)使用串行、并行垃圾收集器

    -XX:+UseSerialGC -XX:+UseParNewGC

    6)使用灵活版并行垃圾收集器

    -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=100

    只使用-XX:+UseParallelGC:年轻代用并行的ParallelGC,老年代使用串行GC
    带上-XX:+UseParallelOldGC:年轻代用Parallel并行GC,老年代使用并行的ParallelOldGC
    -XX:MaxGCPauseMillis:设置最大垃圾回收停顿毫秒数

    7)使用CMS并发垃圾收集器(针对老年代,使用标记清除算法)

    -XX:+UseConcMarkSweepGC

    8)使用G1垃圾收集器

    -XX:+UseG1GC

    设置期望达到的最大GC停顿指标

    -XX:MaxGCPauseMillis

    设置G1区域大小。默认为堆内存的1/2000

    -XX:G1HeapRegionSize=n

    设置STW工作线程的值。设置为逻辑处理器的数量,最多为8

    -XX:ParallelGCThreads=n

    当老年代大小占整个队大小百分比达到该阈值时触发Mixed GC。默认值45%

    -XX:InitiatingHeapOccupancyPercent=n

    3.查看java进程

    jsp [-l]

    4.查看java进程的所有参数

    jinfo -flags <pid>

     查看单一参数:

    jinfo -flags MaxHeapSize 6219

    5.jstat堆内存分析

    1)查看class加载统计

    jstat -class 6219

    2)查看编译统计

    jstat -compiler <pid>

    3)垃圾回收统计

    jstat -gc <pid> [间隔多少毫秒打印] [打印几次]

    MC:方法区大小(KB)MU:方法区使用大小(KB)CCSC:压缩类空间大小(KB)CCSU:压缩类空间使用大小(KB)YGC:年轻代垃圾回收次数YGCT:年轻代垃圾回收消耗时间

    FGC:老年代垃圾回收次数  FGCT:老年代垃圾回收消耗时间  GCT:垃圾回收消耗总时间

    6.jmap,更详细的jstat

    1)查看内存使用情况

    jmap -heap <pid>

    2)查看活跃对象

    jmap -histo:live <pid> | more

    对象说明:B:byte C:char D:double F:float I:int J:long Z:boolean [:数组,如[I表示int[] [L+类名:其他对象

    3)把内存使用情况dump到文件中

    jmap -dump:format=b,file=/d/burp/dump.dat 15156

    7.jhat分析dump下来的文件

    1)启动服务

    jhat -port <port> <file>

    2)浏览器访问

    3)OQL查询

    8.jstack查看java线程运行情况

    jstack <pid>

    9.java代码优化建议

    ●尽量使用局部变量,方法内少用引用类型

    ●减少对变量的重复计算

    for(int i=0; i<list.size(); i++){}

    改为

    int length = list.size();
    for(int i=0; i<length; i++){}

    ●采用懒加载

    ●使用数据库连接池和线程池

    ●容器初始化时尽量指定长度

    ●用Entry遍历map

    for(Map.Entry<String, String> entry : map.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();
    }
  • 相关阅读:
    Flink基础(57):FLINK-SQL函数(20) 内置函数(15)日期函数(二)
    Flink基础(56):FLINK-SQL函数(19)内置函数(14)字符串函数(五)
    位示图算法实现大数据的存储
    位示图算法实现大数据的存储
    JobTracker作业启动过程分析
    mysql 查询优化~ 分页优化讲解
    mysql 原理~ index的详解
    指纹识别开发1.0
    java8 base64编码和解码
    Cow Bowling POJ
  • 原文地址:https://www.cnblogs.com/naixin007/p/13689947.html
Copyright © 2020-2023  润新知