1.注意这里的一个分界线就是1.5 和 1.6 之间。 attach 功能是在jdk 1.6 版本之后出现的一个java 的新功能。
所以在1.6版本之前的java虚拟机不能够被attach。所以1.5版本编译的程序我们都不能被attach. 也不能被VirtualMachine.list
请看下面源代码:
上面的这段注释说, 只能够列表出能够被attach 的java 虚拟机。
因此,导致了一个现象:
打印本机虚拟机的代码:
package com.agent;
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.VirtualMachineDescriptor;
public class AttachTest extends Thread {
public static void main(String[] args) throws Exception {
while (true) {
for (VirtualMachineDescriptor vmd : VirtualMachine.list()) {
System.out.println(vmd);
}
Thread.sleep(10000);
}
}
}
代码执行结果:
里面之所以会比jconsole 多一个进程号。是因为我们通过eclipse 执行了一个AttachTest这个类中的main方法。所以一个main 进程就是一个java虚拟机。(以前我一直以为一台机子上只有一个java虚拟机。)