16.JVM垃圾回收
2020-03-06 本文已影响0人
强某某
JDK内置工具
-
javap
java反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件。
1.png -
JPS
jsp显示当前所有java进程pid的命令
2.png -
jstat
3.png
-
jcmd
5.png -
jinfo
6.png -
jhat
7.png -
jmap
8.png -
jstack
9.png -
Jconsole
10.png -
JvisualVM
11.png
调优基本概念
在调整性能时,JVM有三个组件:
- 堆大小调整
- 垃圾收集器调整
- JIT编译器
大多数调优选项都与调整堆大小和为具体的情况选择最合适的垃圾收集器有关。
JIT编译器在新版本JVM上面已经优化很好,所以一般不需要进行操作,而且即使操作也是源码级别的难度比较高。
通常,在调优Java应用程序时,重点是以下两个主要目标之一:
- 响应性:应用程序或系统对请求的数据进行响应的速度,对于专注于响应性的应用程序,长的暂停时间是不可接受的,重点是在短时间内做出回应。
- 吞吐量:侧重于在特定时间段内最大化应用程序的工作量,对于专注于吞吐量的应用程序,高暂停时间是可接受的。由于高吞吐量应用程序在较长时间内专注于基准测试,因此不需要考虑快速响应时间。
- 系统瓶颈核心还是在应用代码,一般情况下无需过多调优,JVM本身在不断的优化
常用JVM参数
12.pngGC调优思路
- 分析场景
例如:启动速度慢,偶尔出现响应慢于平均水平或者出现卡顿 - 确定目标
内存占用、低延时、吞吐量 - 收集日志
通过参数配置收集GC日志;通过JDK工具查看GC状态 - 分析日志
使用工具辅助分析日志,查看GC次数,GC时间 - 调整参数
切换垃圾收集器或者调整垃圾收集器参数
垃圾收集器Parallel参数调优
13.pngParallel是新版默认的收集器,而且吞吐量优先
垃圾收集器CMS(1.9被废弃)参数调优
14.png垃圾收集器G1参数调优
15.png运行时JIT编译器优化参数
JIT编译指的是字节码编译为本地代码(汇编)执行,只有热点代码才会编译为本地代码。解释器执行节约内存,反之可以使用编译执行来提升效率
16.png