之前搞过,现在做一个demo。试试以前的例子。
一:测试代码如下:
public class MyTest {
public static void main(String[] args) {
new MyTest().test();
}
void test() {
System.out.println(1);//debug 1
System.gc();//debug2
System.out.println(2);//debug3
}
}
这里,运行此代码,然后在debug1 处停住,然后做第二件事。
二:Btrace
1:在jdk bin下有一个工具jvisualvm.exe,打开后点击工具,插件,然后安装BTrace Workbench,重启jvisualvm.exe
2:在本地的地方找到你运行的java程序MyTest 然后鼠标右键Trace application,在打开的页面放下面代码,然后点击Start
/* BTrace Script Template */
import static com.sun.btrace.BTraceUtils.jstack;
import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.str;
import static com.sun.btrace.BTraceUtils.strcat;
import static com.sun.btrace.BTraceUtils.timeMillis;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.TLS;
@BTrace
public class TraceHelloWorld {
@OnMethod(clazz = "java.lang.System", method = "gc" )
public static void startMethod(){
println("****************************************");
jstack();
println("****************************************");
}
@OnMethod(clazz = "java.lang.System", method = "gc", location = @Location(Kind.RETURN))
public static void endMethod(){
println("=========================================");
jstack();
println("=========================================");
}
}
==
三:
将一中的程序走过debug2,然后看jvisualvm.exe的输出,如此便可以看到调用System,gc的调用过程。
四:下载官方的https://kenai.com/projects/btrace 在这里面找到 https://kenai.com/projects/btrace/downloads/directory/releases
我这里有一个下载是:https://kenai.com/projects/btrace/downloads/download/releases/release-1.2.5.1/btrace-bin.tar.gz
在bin目录下有执行的命令。