VisualVM是一个非常神奇的性能检测工具;从官网下载完毕之后,先不要急着使用,因为VisualVM是需要插件才能够使用的,Tools->Plugins可以选定插件进行在线安装,但是有的时候因为网络原因,下载过程发生异常(笔者就遇到这种情况),可以从下面的网址来获取离线安装包(需要逐个点一下,或者采用迅雷的全部下载链接?);可以在Plugins界面的“downloads”标签页中通过“add Plugins...”按钮来导入安装包进行安装。
http://services.netbeans.org/uc/show_uc_content.php?ucurl=http://bits.netbeans.org/VisualVM/uc/8u40/updates.xml
这里介绍一下Visual里面的神奇功能:BTrace,可以通过BTrace来跟踪一下执行jar包的变量,输入变量值,这个在无法调试的环境下(比如生产环境)超级有用。
package com.learnworld; import java.io.BufferedReader; import java.io.InputStreamReader; public class BTraceTest { public int add(int a, int b){ return a + b; } public static void main(String[] args) throws Exception{ BTraceTest test = new BTraceTest(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); for(int i = 0; i< 10; i++){ reader.readLine(); int a = (int)Math.round(Math.random() * 1000); int b = (int)Math.round(Math.random() * 1000); System.out.println(test.add(a, b)); } } }
打成jar包后,通过命令行java -jar BTraceTest.jar
然后使用VVM打开,就可以看到VVM已经探测到了这个jar包,然后在vvm左侧Applications栏,右键这个应用,选择“Trace Application...”
/* BTrace Script Template */ import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; @BTrace public class TracingScript { @OnMethod(clazz="com.learnworld.BTraceTest",method="add",[email protected](Kind.RETURN)) public static void func(int a, int b, @Return int result){ println("调用堆栈:"); jstack(); println(strcat("方法参数A:", str(a))); println(strcat("方法参数B:", str(b))); println(strcat("方法结果:", str(result))); } }
在命令窗口随便输入些什么,即可看到BTrace下面的output将会输出指定的变量:
a是测试用的,返回了1261,之后启动了BTrace,可以看到有一行“btrace DEBUG...”,就是进入了可调式状态。输入100(随便输入),返回1339,再看一下vvm:
将会把调用堆栈(指定的add方法的堆栈)输出,然后把参数都打印出来。
时间: 2024-10-27 08:00:30