精华内容
下载资源
问答
  • VisualVM 使用详解

    2012-09-14 11:14:56
    VisualVM安装使用详解,高级的工具,感觉厉害的程序员都应该掌握
  • Java VisualVM使用

    2021-02-28 10:47:24
    Java VisualVMJava VisualVM介绍Java VisualVM is a tool that provides a visual interface for viewing detailed information about Java applications while they are running on a Java Virtual Machine (JVM), ...

    Java VisualVM

    Java VisualVM介绍

    Java VisualVM is a tool that provides a visual interface for viewing detailed information about Java applications while they are running on a Java Virtual Machine (JVM), and for troubleshooting and profiling these applications. Various optional tools, including Java VisualVM, are provided with Sun‘s distribution of the Java Development Kit (JDK) for retrieving different types of data about running JVM software instances. For example, most of the previously standalone tools JConsole, jstat, jinfo, jstack, and jmap are part of Java VisualVM. Java VisualVM federates these tools to obtain data from the JVM software, then re-organizes and presents the information graphically, to enable you to view different data about multiple Java applications uniformly, whether they are running locally or on remote machines. Furthermore, developers can extend Java VisualVM to add new functionality by creating and posting plug-ins to the tool‘s built-in update center.

    Java VisualVM can be used by Java application developers to troubleshoot applications and to monitor and improve the applications‘ performance. Java VisualVM can allow developers to generate and analyse heap dumps, track down memory leaks, browse the platform‘s MBeans and perform operations on those MBeans, perform and monitor garbage collection, and perform lightweight memory and CPU profiling.

    Java VisualVM

    Java Visual使用

    通过JMX监控远程服务器jvm资源使用情况。

    JMX:Java Management Extensions ,即 Java 管理扩展 , 是一个为应用程序、设备、系统等植入管理功能的框架。 JMX 可以跨越一系列异构操作系统平台、系统体系结构和 网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

    需要在远程服务器启动java程序(比如Tomcat的catalina.sh)时在JAVA_OPTS中指定如下参数(最后一项参数可选):

    -Dcom.sun.management.jmxremote.port=8899 ---配置远程 connection 的端口号,确保该端口没有被占用

    -Dcom.sun.management.jmxremote.ssl=false ---指定JMX 是否启用 ssl

    -Dcom.sun.management.jmxremote.authenticate=false ---指定JMX 是否启用鉴权(需要用户名,密码鉴权)

    -Djava.rmi.server.hostname=127.0.0.1 ---配置server 的 IP

    Java程序启动项设置(追加java visualVM相关配置项):

    java -Dcom.sun.management.jmxremote.port=8899 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false \

    参考文档:

    Memory Profiling using Visual VM

    Configuring Java JVM Heap Size

    展开全文
  • VisualVM使用

    2019-11-24 13:13:50
    VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优 属于jdk自带的软件,在目录%HOME%\bin\jvisualvm.exe 安装插件 我这里设置的:...

    VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优

    属于jdk自带的软件,在目录%HOME%\bin\jvisualvm.exe

    安装插件

    我这里设置的:https://visualvm.github.io/archive/uc/8u40/updates.xml.gz
    在这里插入图片描述

    显示可以安装的插件
    在这里插入图片描述

    这是我已经安装的软件,后面演示需要的
    在这里插入图片描述

    与jconsole差不多功能

    jvisualvm包括了jconsole的大部分功能,可以这么理解,jvisualvm是之后的版本,可扩展性更好
    在这里插入图片描述
    在这里插入图片描述

    dump文件生成

    可以生成Thread与Head的dump文件
    在这里插入图片描述

    这是Heap的
    在这里插入图片描述
    这是Thread的
    在这里插入图片描述

    BTrace动态日志跟踪

    准备测试代码

    public class BTraceTest {
    	public int add(int a, int b) {  
            return a + b;  
        }  
        public void run(){  
            int a = (int) (Math.random() * 1000);  
            int b = (int) (Math.random() * 1000);  
            System.out.println(add(a, b));  
        }  
        public static void main(String[] args) throws IOException {  
            BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));  
            BTraceTest bTraceTest=new BTraceTest();  
            bReader.readLine();  
            for (int i = 0; i < 10; i++) {  
                bTraceTest.run();  
            }  
        }  
    }
    

    运行测试一下,我们发现只能看到输出结果,那么我们在不改动源代码的情况下是否能看到变量a,b的值呢
    在这里插入图片描述

    我们借助JVisualVM的BTrace

    编写程序

    /* BTrace Script Template */
    import com.sun.btrace.annotations.*;
    import static com.sun.btrace.BTraceUtils.*;
    
    @BTrace
    public class TracingScript {
    	/* put your code here */
        @BTrace
        public class TracingScript {
        @OnMethod(
              clazz="priv.dengjili.day.test.jvm.BTraceTest",
              method="add",
              location = @Location(Kind.RETURN)
          )
          public  static  void func(@Self priv.dengjili.day.test.jvm.BTraceTest instance,int a,int b, @Return int result){
                println("调用栈:");
                jstack();
                println(strcat("方法参数 A:",str(a)));
                println(strcat("方法参数B:",str(b)));
                println(strcat("结果:",str(result)));
          }
        }
    }
    

    复制到BTrace中,点击start,再控制台中输入随意的字符
    在这里插入图片描述
    原程序正常运行
    在这里插入图片描述
    查看BTrace,查看a、b变量
    在这里插入图片描述

    完成输出如下

    ** Compiling the BTrace script ...
    *** Compiled
    ** Instrumenting 1 classes ...
    *** Done
    ** BTrace up&running
    
    *** Done
    ** BTrace up&running
    
    调用栈:
    priv.dengjili.day.test.jvm.BTraceTest.add(BTraceTest.java:15)
    priv.dengjili.day.test.jvm.BTraceTest.run(BTraceTest.java:20)
    priv.dengjili.day.test.jvm.BTraceTest.main(Unknown Source)
    方法参数 A:289
    方法参数B:639
    结果:928
    调用栈:
    priv.dengjili.day.test.jvm.BTraceTest.add(BTraceTest.java:15)
    priv.dengjili.day.test.jvm.BTraceTest.run(BTraceTest.java:20)
    priv.dengjili.day.test.jvm.BTraceTest.main(Unknown Source)
    方法参数 A:170
    方法参数B:827
    结果:997
    调用栈:
    priv.dengjili.day.test.jvm.BTraceTest.add(BTraceTest.java:15)
    priv.dengjili.day.test.jvm.BTraceTest.run(BTraceTest.java:20)
    priv.dengjili.day.test.jvm.BTraceTest.main(Unknown Source)
    方法参数 A:758
    方法参数B:452
    结果:1210
    调用栈:
    priv.dengjili.day.test.jvm.BTraceTest.add(BTraceTest.java:15)
    priv.dengjili.day.test.jvm.BTraceTest.run(BTraceTest.java:20)
    priv.dengjili.day.test.jvm.BTraceTest.main(Unknown Source)
    方法参数 A:521
    ** BTrace has stopped
    ** BTrace has stopped
    
    
    展开全文
  • VisualVM使用手册

    千次阅读 2017-11-21 17:21:35
    VisualVM使用手册       徐景春 2011-4-2       目 录 1.  Visual VM基本信息... 3 2.  Visual VM的安装... 3 3.  远程监控连接方式... 4 3.1 JMX...

    上海盛大网络发展有限公司

    VisualVM使用手册

     

     

     

    徐景春

    2011-4-2

     

     


     

    目  录

    1.     Visual VM基本信息... 3

    2.     Visual VM的安装... 3

    3.     远程监控连接方式... 4

    3.1 JMX方式连接... 4

    3.2 Jstatd方式连接... 7

    4.     VisualVM监控内容介绍... 10

     


     

    1. Visual VM基本信息

    VisualVM是JDK的一个集成的分析工具,自从JDK 6 Update 7以后已经作为Sun的JDK的一部分。

          VisualVM可以做的:监控应用程序的性能和内存占用情况、监控应用程序的线程、进行线程转储(Thread Dump)或堆转储(Heap Dump)、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,保存快照以便脱机分析应用程序;同时它还支持在MBeans上进行浏览和操作。尽管 VisualVM自身要在JDK6以上的运行,但是JDK1.4以上版本的程序它都能被它监控。

    界面

     

    2. Visual VM的安装

    Step1.从官网http://visualvm.java.net/下载VisualVM安装程序,有英文版与多语言版(包括中文)

    Step2.需要在本机安装jdk 6以上jdk版本

    Step3.解压缩VisualVM压缩包后,至bin目录下,打开visualvm.exe即可运行

     

    3. 远程监控连接方式

    以下以监控Jboss应用为例,VisualVM有两种方式监控,为JMX方式和Jstatd方式。

    3.1JMX方式连接

    Step1. 添加Jboss启动参数,开启监控端口

    A.  修改JDK中jmx配置文件方法:

    切换至$JAVA_HOME所在目录/jre/lib/management下,

        将jmxremote.access、jmxremote.password.template权限调整为读写:

                   #cpjmxremote.password.template jmxremote.password

                   #chmod600 jmxremote.password

                   #chmod600 jmxremote.access

        vi jmxremote.password去掉

           # monitorRole QED

           # controlRole R&D 前面的#号

    B. 在Jboss的启动文件中添加以下信息:

              JAVA_OPTS="-Dcom.sun.management.jmxremote.port=8889 \

              -Dcom.sun.management.jmxremote.ssl=false \

              -Dcom.sun.management.jmxremote.authenticate=false \

              -Djava.rmi.server.hostname=<服务器IP> "

    例如:

    Export  JAVA_OPTS="$JAVA_OPTS

    -Djava.rmi.server.hostname=10.132.81.31

    -Dcom.sun.management.jmxremote.port=8889

    -Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false "

    C.  检查启动情况:

       netstat -a | grep -i 8889 查看端口占有情况

       如果8889端口被其他程序占用,在jboss配置文件中调整端口-Dcom.sun.management.jmxremote.port=****

     

    Step2. VisualVM中添加JMX端口

    在远程上右键,点击[添加远程主机],输入被监控的服务器IP

     

     

    在已添加的服务器标签上点击右键,选择[添加JMX连接],输入之前在Jboss中添加的远程端口如8889,显示名称可自定义,点击确定。

    JMX方式添加成功。

    注意:

    如果要远程监控服务器,必须要修改服务器Hosts中Localhost地址为本机对外IP或者在Jboss启动参数中添加-Djava.rmi.server.hostname=<服务器IP>,否则会出现无法用JMX连接。

     

    3.2Jstatd方式连接

    Step1. 启动Jstatd

    Cd$JAVA_HOME/bin目录下

    用vi新建一个jstatd.all.policy文件,在里面添加以下内容来保证jstatd服务启动的时候不报异常:

    grant codebase"file:${java.home}/../lib/tools.jar" {
        permission java.security.AllPermission;
    };

        netstat -ano| grep -i 1099 查看1099端口是否被占用了,如果被占用,则需要选择其他端口来启动jstatd服务

        如果端口被占用,用以下方式启动jstatd服务:

        rmiregistry2020 & jstatd -J-Djava.security.policy=jstatd.all.policy -p 2020 (需要后台启动,否则退出后命令失效)

    将Jstatd绑定到2020端口

    后台启动

    nohup jstatd-J-Djava.security.policy=jstatd.all.policy-J-Djava.rmi.server.hostname=10.132.81.17

    -J-Dcom.sun.management.jmxremote.ssl=false-J-Dcom.sun.management.jmxremote.authenticate=false &

    备注:

    与添加Jboss启动命令相同,如果Hosts中未更改Localhost对应本机IP,则需要添加参数-J-Djava.rmi.server.hostname=<服务器IP>

     

    Step2. 添加Jstatd连接

    在远程服务器IP上点击右键,选择[添加jstatd连接]

     

    在属性中,可以看到已添加Jstatd默认端口1099,也可以点击添加定制输入指定端口(如2020端口),确定。

     

    Jstatd添加完成后,可自动显示该服务器上的应用如图(Jstatd会通过进程号监控应用)

     

    4. VisualVM监控内容介绍

    下面以监控JBoss为例,介绍下用VisualVM监控JVM内存情况。

    由于PE81.17为通过JMX方式连接到JBoss,JBoss(pid 19268)为Jstatd方式连接,因此两个标签实际上为同一个Jboss应用,实际应用中两种连接方式可选其一。

     

     

     

    概述

    在概述标签中,描述了该应用的类型,进程号,IP地址,JVM内存大小设置情况,以及启动参数等,也可看到应用路径,如:

    webapp.root=/home/peuser/pe/run/jboss/./tmp/deploy/tmp61754843639786460pe-1.0-SNAPSHOT-exp.war

     


     

    监控总览

    JVM内容总览,可从上图各图形中看到当前CPU、堆栈、PerGen空间使用以及对象和线程的活动情况。

    如果PerGen不断增加,超过JVM中设置的PerGen Size,可能会导致内存溢出情况。

    可手工执行垃圾回收,测试程序垃圾回收是否正常,也可执行堆Dump(heapdump),远程监控默认保存为服务器/tmp/heapdump-****.hprof文件,若为本地JVM监控,可直接显示结果。如下图:

     

     

     

     

     

    线程监控

    此标签下可以跟踪线程状况。

    线程状态

    可以监控各个线程运行情况(此处监视可能翻译有误,应为Block阻塞进程)

    点击线程dump,可以生成该线程的运行情况的thread dump文件,通过thread dump提供的相关信息,我们可以看到线程在什么地方被阻塞了以及线程的其他状态。

     

     

     

     

    与图表对应的具体数值

     

    另一种显示形式,线程不同状态所占时间比例。

     

     

    抽样器介绍

    CPU抽样

    可以看到当前方法所占用的CPU情况

    内存采样

    可以看到当前方法所占用的内存情况


     

    Visual GC监控

    下图有点类似于Jconsole监控

    GCJAVA的垃圾回收机制,可以根据这个图表来判断程序是否会出现内存泄露或溢出。

    内存申请过程:

    A.JVM会试图为相关Java对象在Eden中初始化一块内存区域

    B.当Eden空间足够时,内存申请结束。否则到下一步

    C.JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的JVM垃圾回收);释放后若Eden空间仍然不足以放入新对象,则试图将部Eden中活跃对象放入Survivor区/OLD区

    D.Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区

    E.当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)

    F.完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现"outofmemory错误"。

          从内存申请过程来看,若Old区域堆满后,会出现内存溢出。

     

    展开全文
  • VisualVM使用方法

    万次阅读 2017-12-14 18:36:53
    1、VisualVM 简介VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序(Java 应用程序)的详细信息。VisualVM 对 Java Development ...

    1、VisualVM 简介


    VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序(Java 应用程序)的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序以及远程主机上运行的应用程序的相关数据。此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享。
    为了能充分利用所有的 Java VisualVM 功能,应运行 Java Platform, Standard Edition (Java SE) 版本 6。

    2、Tomcat远程监控配置


    2.1启动visualvm
    命令行运行jvisualvm

    2.2JMX 配置
    这里写图片描述

    远程机器的程序需要加上JVM参数
    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=8099(配置远程 connection 的端口号的)
    -Dcom.sun.management.jmxremote.ssl=false(指定了 JMX 是否启用 ssl)
    -Dcom.sun.management.jmxremote.authenticate=false( 指定了JMX 是否启用鉴权(需要用户名,密码鉴权))
    -Djava.rmi.server.hostname=192.168.0.1(配置 server 的 IP)

    备注:另外需要检查 hostname –i,看解析出来是否为本地的IP,如是127.0.0.1或者IP为多个IP中之一,则其他的IP无效,会连接不上。

    2.3jstatd 配置

    找到需要远程连接的Linux服务器的jdk的bin目录,在其下面建立一个指定安全策略的文件 jstatd.policy 文件,内容如下:

    grant codebase “file:${java.home}/../lib/tools.jar” {
    permission java.security.AllPermission;
    };
    然后在远程主机上启动 jstatd 并且不要关闭。
    启动命令:jstatd -J-Djava.security.policy=jstatd.policy -p 1099
    这样就可以在 JVisualVM 上,添加远程主机,并且设置 jstatd 的端口就可以了。

    3、Dump


    VisualVM 能够生成堆转储,统计某一特定时刻 JVM 中的对象信息,帮助我们分析对象的引用关系、是否有内存泄漏情况的发生等。

    3.1堆dump
    这里写图片描述
    当 VisualVM 统计完堆内对象数据后,会把堆转储信息显示在新的堆转储标签内,我们可以看到摘要、类、实例数等信息以及通过 OQL 控制台执行查询语句功能。
    A. 堆转储的摘要包括转储的文件大小、路径等基本信息,运行的系统环境信息,也可以显示所有的线程信息。

    B. 从类视图可以获得各个类的实例数和占用堆大小数,分析出内存空间的使用情况,找出内存的瓶颈,避免内存的过度使用。

    C. 还能对两个堆转储文件进行比较。通过比较我们能够分析出两个时间点哪些对象被大量创建或销毁。

    3.2线程Dump

    这里写图片描述
    线程状态:
     RUNNABLE: 运行中状态,可能里面还能看到locked字样,表明它获得了某把锁。
     BLOCKED:被某个锁(synchronizers)給block住了。
     WAITING:等待某个condition或monitor发生,一般停留在park(), wait(), sleep(),join() 等语句里。
     TIME_WAITING:和WAITING的区别是wait() 等语句加上了时间限制 wait(timeout)。

    4、CPU


    VisualVM 能够监控应用程序在一段时间的 CPU 的使用情况,显示 CPU 的使用率、方法的执行效率和频率等相关数据帮助我们发现应用程序的性能瓶颈。我们可以通过 VisualVM 的监视标签和抽样器标签对应用程序进行 CPU 性能分析。
    4.1CPU 监视
    在监视标签内,我们可以查看 CPU 的使用率以及垃圾回收活动对性能的影响。
    1、过高的 CPU 使用率可能是由于我们的项目中存在低效的代码,可以通过 Profiler 标签的 CPU 性能分析功能进行详细的分析。
    2、如果垃圾回收活动过于频繁,占用了较高的 CPU 资源,可能是由内存不足或者是新生代和旧生代分配不合理导致的等。

    在抽样器标签,点击“CPU”按钮启动一个 CPU 性能分析会话 ,VisualVM 会检测应用程序所有的被调用的方法。当进入一个方法时,线程会发出一个“method entry”的事件,当退出方法时同样会发出一个“method exit”的事件,这些事件都包含了时间戳。然后 VisualVM 会把每个被调用方法的总的执行时间和调用的次数按照运行时长展示出来。
    此外,我们也可以通过性能分析结果下方的方法名过滤器对分析结果进行过滤。

    4.2 CPU 快照
    当有一个性能分析会话(内存或者 CPU)正在进行时,我们可以通过性能分析结果工具栏的“快照”按钮生成 Profiler 快照捕获当时的性能分析数据。

    5、线程


    Java 语言能够很好的实现多线程应用程序。当我们对一个多线程应用程序进行调试或者开发后期做性能调优的时候,往往需要了解当前程序中所有线程的运行状态,是否有死锁、热锁等情况的发生,从而分析系统可能存在的问题。

    5.1线程监视
    在 VisualVM 的监视标签内,我们可以查看当前应用程序中所有活动线程和守护线程的数量等实时信息。

    5.2线程插件安装
    1、从主菜单中选择“工具”>“插件”。

    2、在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。

    5.3死锁例子
    从线程图中,我们可以很轻易地找到这种可疑特征:两个(或多个)线程长期同时处于”监视(被阻塞)”状态,提示“检查到死锁”说明它们出现了死锁,应当生成dump查到详细内容。
    2、生成dump后,在dump的最下面有关于锁的说明

    展开全文
  • Java VisualVM使用简单教程

    千次阅读 2018-11-27 09:05:35
    今天介绍一下VisualVM使用。(具体的检测数据分析在此不做过多阐述,只介绍工具的使用和基础分析) 我将从以下几个方面介绍该工具的使用: 准备工作 插件使用 基础分析 一、准备工作 1. 服务所在的lin...
  • 2、lsof -i:8999查看端口状态: 3、使用visualVm监控远程虚拟机:相对于使用jstatd的监控,使用jmx的方式会有更多的可以监控的功能,如Threads等。 4、为了安全起见,可以采用配置鉴权的方式,详见参考文献中的介绍...
  • 下载地址:https://visualvm.github.io/pluginscenters.html 通过Visual VM版本或者jdk版本选择对应的下载地址,如本人选择的就是红框中的下载地址。 进入后可选择需要的插件进行下载。 这里注意一下有些插件的安装...
  • [LeetCode] Longest Valid Parentheses 第一种方法,用栈实现,最容易想到,也比较容易实现,每次碰到‘)’时update max_len,由于要保存之前的‘(’的index,所以space complexity 是O(n) // 使用栈,时间 ......
  • java VisualVM使用

    2018-11-08 18:04:34
    1. Java VisualVM是一个可视化的JVM 监控工具,在jdk1.6 中由 Oracle 提供。  位置:jvisualvm.exe 在JDK 的 bin 目录下。 2. 右键可以查看threaddump和headdump。 ...
  • 堆溢出实例 通过不断创建Object对象,并加入到List中,导致堆溢出。 import java.util.ArrayList;... 通过Java VisualVM 分析 首先将dump文件装入VisualVM 可以看到java.lang.Object对象占用了大量内存,导致堆溢出。
  • VisualVM 使用实例

    2014-04-30 14:42:18
    VisualVM概述 VisualVM 是一款免费的性能分析工具。监控程序运行的实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。   ...
  • VisualVM入门指南 使用说明 新手上路 JVM JAVA虚拟机 调试监测
  • 精选(43) Java VisualVM 使用技巧

    万次阅读 2019-05-04 14:23:02
    为了了解 JVM 的运行情况,我们需要选择一个监控工具来帮助我们收集数据,我常用的监控工具是 JDK 自带的 Java VisualVM。 一般我们的项目都是运行在远程的服务器上,常见的配置方式有两种,下面讲解一下这两种方式...
  • IDEA安装 VisualVM使用

    千次阅读 2021-03-13 09:40:03
    1. VisualVM是什么按照VisualVM官网(http://visualvm.github.io/)...专为开发和生产时间使用而设计。我们在jdk安装包中也可以发现它2. IDEA安装VisualVM插件File->Setting->Plugins -> Browers Repositrori...
  • 14.VisualVM使用详解 15.VisualVM堆查看器使用的内存不足 16.性能调优概述 17.性能调优–案例1 18.性能调优—案例三 19.class文件–文件结构–魔数 20.文件结构–常量池 21.文件结构访问标志(2个字节) 22.类加载...
  • 关于VisualVM,这篇文章写的很好 https://www.cr173.com/html/154033_1.html 欢迎大家加入我的github项目,一起学习,一起发展 全栈工程师进阶学习站我个人的学习及生活小记录行业内最新最群的报告,工作日每日更新 ...
  • Java VisualVM使用手册

    万次阅读 2015-12-22 15:58:30
    我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualVM就是不错的监控工具. ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,090
精华内容 6,036
关键字:

visualvm使用