Java本身提供了多种丰富的方法和工具来帮助开发人员查看和分析GC及其JVM内存的状况,同时开源界也有一些工具用于查看和分析GC和JVM内存的状况。

  通过这些分析,可以排查程序中内存泄露的问题及调优程序的性能。

  1.输出GC日志

    输出GC日志对于跟踪分析GC的状况来说,无疑是最直接的分析内存回收状态的方法,只是输出之后需要人为的去分析,来判断GC的状况。

    JVM支持将日志输出到控制台和指定的文件中,方法如下:

    a>输出到控制台

      在JVM的启动参数中加入-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime

      按照参数的顺序分别输出GC的简要信息,GC的详细信息,GC的时间信息及GC造成的应用暂停的时间。

    b>输出到指定的文件中

      在JVM启动参数中在增加-Xloggc:gc.log可指定将gc的信息输出到gc.log中。

    还有一些参数是:-verbose:gc、-XX:+PrintTenuringDistribution等。

  2.GC Portal

    将GC日志输出固然有一定的作用,但如果要靠人为进行分析,还是相当复杂的。因此Sun提供了一个GC Portal来帮助分析这些GC日志,并生成相关的图形化的报表,GC     Portal部署起来会有些麻烦,它需要运行在老版本的Tomcat上,同时需要数据库,部署完毕后通过上传日志文件的方式即可完成GC日志的分析,此GC日志输出的JVM参    数为:-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps [-Xloggc:文件名],在上传日志时GC Portal的选项里只有jdk 1.2或jdk 1.2-1.4的版本。虽    然经过测试,JDK 6的日志也是可以分析出来的,但它的限制在于仅支持5MB的gc日志的分析,GC Portal可提供吞吐量的分析、耗费的CPU的时间、造成的应用暂停的时    间、每秒从新生代转化到旧生代的数量、minor GC的状况及Full GC的状况等。

  3.JConsole

    JConsole可以图形化查看JVM中内存的变化状况,JConsole是JDK 5及以上版本中自带的工具,位于JDK的bin目录下,运行时直接运行JConsole.exe或者          JConsole.sh(要求支持图形界面)。在本地的 Tab页上看到运行了java的pid,双击即可查看相应进程的JVM状况,同时,JConsole也支持查看远程的JVM的运行状况,    具体可参见 JConsole的User Guide。

    JConsole中显示了JVM中很多的信息:内存、线程、类和MBean等,在打开JConsole的内存Tab页后,可看到JVM内存部分的运行状况。这对于分析内存是否有溢出及GC    的效果更加直接明了,JConsole的运行。

  4. JVisualVM

    JVisualVM是JDK 6 update 7之后推出的一个工具,它类似于JProfiler的工具,基于此工具可查看内存的消耗情况、线程的执行状况及程序中消耗CPU、内存的动作。

    在内存分析上,JVisualVM的最大好处是可通过安装VisualGC插件来分析GC趋势、内存消耗详细状况。

  还有相应的很多工具可以进行分析,这里就不多说了。

    

最新文章

  1. [HTML/HTML5]2 CSS样式表设置
  2. Java String.split()用法小结
  3. HDU 1505 City Game (hdu1506 dp二维加强版)
  4. codechef 两题
  5. html5 canvas 移动小方块
  6. DatagramChannel
  7. 【九度OJ】题目1096-二分查找
  8. [面试题总结及扩展知识]HTTP协议返回状态码的问题
  9. Oracle中奇怪的【不等于号】
  10. .NET Orm 性能测试
  11. Oracle 去特殊字符
  12. PHP下载微信头像
  13. Elasticsearch-6.7.0系列(三)5601端口 kibana——ES的UI界面
  14. DapperHelper 帮助类
  15. No compiler is provided in this environment.Perhaps you are running on a JRE rather than a JDK?报错解决
  16. 自学Zabbix9.2 zabbix网络发现规则配置详解+实战
  17. loj 10001 种树
  18. Oracle数据库三种备份方案
  19. 通过 Service 访问 Pod
  20. Dbutils学习(介绍和入门)

热门文章

  1. HDU - 4871 Shortest-path tree (最短路径树+ 树分治)
  2. HDU - 3338 Kakuro Extension (最大流求解方格填数)
  3. 【转载】IDEA:放置型塔防备忘录
  4. HttpWebRequest 返回BadRequest(400) 同时返回Response
  5. [转]MySQL查看数据库相关信息
  6. Linux学习笔记之CentOS6.9 防火墙的关闭以及开启
  7. CSS Link(链接)
  8. 为什么 PHP 程序员应该学习使用 Swoole
  9. 使用ThinkPHP5连接数据库
  10. 20145324 《Java程序设计》第1周学习总结