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();
}

 

posted on 2020-09-18 10:49  bofeng  阅读(140)  评论(0编辑  收藏  举报