16.JVM垃圾回收

JDK内置工具

  1. javap
    java反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件。


    1.png
  2. JPS
    jsp显示当前所有java进程pid的命令


    2.png
  3. jstat


    3.png
4.png
  1. jcmd


    5.png
  2. jinfo


    6.png
  3. jhat


    7.png
  4. jmap


    8.png
  5. jstack


    9.png
  6. Jconsole


    10.png
  7. JvisualVM


    11.png

调优基本概念

在调整性能时,JVM有三个组件:

  1. 堆大小调整
  2. 垃圾收集器调整
  3. JIT编译器

大多数调优选项都与调整堆大小和为具体的情况选择最合适的垃圾收集器有关。
JIT编译器在新版本JVM上面已经优化很好,所以一般不需要进行操作,而且即使操作也是源码级别的难度比较高。

通常,在调优Java应用程序时,重点是以下两个主要目标之一:

  • 响应性:应用程序或系统对请求的数据进行响应的速度,对于专注于响应性的应用程序,长的暂停时间是不可接受的,重点是在短时间内做出回应。
  • 吞吐量:侧重于在特定时间段内最大化应用程序的工作量,对于专注于吞吐量的应用程序,高暂停时间是可接受的。由于高吞吐量应用程序在较长时间内专注于基准测试,因此不需要考虑快速响应时间。
  • 系统瓶颈核心还是在应用代码,一般情况下无需过多调优,JVM本身在不断的优化

常用JVM参数

12.png

GC调优思路

  1. 分析场景
    例如:启动速度慢,偶尔出现响应慢于平均水平或者出现卡顿
  2. 确定目标
    内存占用、低延时、吞吐量
  3. 收集日志
    通过参数配置收集GC日志;通过JDK工具查看GC状态
  4. 分析日志
    使用工具辅助分析日志,查看GC次数,GC时间
  5. 调整参数
    切换垃圾收集器或者调整垃圾收集器参数

垃圾收集器Parallel参数调优

13.png

Parallel是新版默认的收集器,而且吞吐量优先

垃圾收集器CMS(1.9被废弃)参数调优

14.png

垃圾收集器G1参数调优

15.png

运行时JIT编译器优化参数

JIT编译指的是字节码编译为本地代码(汇编)执行,只有热点代码才会编译为本地代码。解释器执行节约内存,反之可以使用编译执行来提升效率


16.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:一字马胡 转载标志 【2017-11-12】 更新日志 日期更新内容备注 2017-11-12新建文章初版 ...
    beneke阅读 2,237评论 0 7
  • Java 虚拟机有自己完善的硬件架构, 如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 屏蔽了与具体操作系...
    尹小凯阅读 1,708评论 0 10
  • Java和C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进来,墙里面的人想出来。 对象...
    胡二囧阅读 1,127评论 0 4
  • GC区域Eden Survivor(from,to), Old Gen和Perm Gen VM区域总体分两类,he...
    Fitz_Lee阅读 446评论 0 0
  • 不論是「語音優律思美」(Lauteuythmie),還是「音樂優律思美」(Toneurythmie),它們都有一些...
    雪莹Hera阅读 323评论 0 0