• java visual VM使用简介


    转载请注明出处

    http://blog.csdn.net/pony_maggie/article/details/44999175


    作者:小马

    VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。它最主要的功能是监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析等。



    通过实际的例子来说明。第一步我们要安装viual VM, 比较好的是在jdk6之后的安装目录下自带了这个工具,不用再独立安装。




    打开之后如下图:




    当我们通过eclipse运行程序时,visual VM会自动识别到正在运行的程序,比如下面一段代码头:

    1. public class StringPoolTest   
    2. {  
    3.   
    4.     public void testStringPoolWithLongString()  
    5.     {  
    6.         long i = 0;  
    7.         while(true)  
    8.         {  
    9.             String longString = "this is a very very long string,to test the gc behavior of the string constant pool" + i;  
    10.             longString.intern();  
    11.             i++;  
    12.         }  
    13.     }  
    14.       
    15.     /** 
    16.      * @param args 
    17.      */  
    18.     public static void main(String[] args)   
    19.     {  
    20.         StringPoolTest test = new StringPoolTest();  
    21.         test.testStringPoolWithLongString();  
    22.   
    23.     }  
    24.   
    25. }  


    在eclipse下运行这段程序,然后到visual VM中打开监视视图,看到如下的显示情况:




    CPU部分不显示,应该是因为我运行的jdk版本太低。内存部分我们看到堆和perm的使用情况,注意看上面的程序,testStringPoolWithLongString函数是个死循环,不断的调用String的intern,intern返回字符串对象的规范化表示形式,当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串,则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。java7以前,字符串常量池是放在perm空间的, 从java7开始,放在heap空间。我用的版本是1.6,所以如果我们切换到perm视图看到的会是另一种景象,




    从图上可以看出,不断的GC,又不断的申请空间。


    线程部分显示的是当前用户线程和守护线程的数量,




  • 相关阅读:
    html 时间区间选择功能
    Django 【settings】数据库设置
    Django forms 定制form字段
    避免js全局变量污染的方法
    js获取路由
    采用遍历的方法获取字符串a在字符串b中的位置
    vue 学习笔记
    Promise
    js常用JSON数据操作
    js 数组遍历方式
  • 原文地址:https://www.cnblogs.com/lcword/p/8078655.html
Copyright © 2020-2023  润新知