基于openjdk-jdk8-b120。
sun.tools.jinfo.JInfo是jinfo工具的入口。
1 sun.tools.jinfo.JInfo
1.1 类图
1.2 属性
无
1.3 构造器
无
1.4 方法
main方法作为Jinfo的入口。
- 对args参数校验,不通过的会打印使用帮助信息
- 通过参数校验的会根据是否包换-flag参数,决定使用VirtualMachine(可以修改manageable参数)还是sun.jvm.hotspot.tools.JInfo。
对于VirtualMachine。
2 sun.jvm.hotspot.tools.JInfo
2.1 类图
2.2 属性
Tool
// 委托agent
private HotSpotAgent agent;
// HotSpotAgent attach可能使用
private JVMDebugger jvmDebugger;
// debug类型DEBUGEE_PID/DEBUGEE_CORE/DEBUGEE_REMOTE
private int debugeeType;
// debugeeType is one of constants below
protected static final int DEBUGEE_PID = 0;
protected static final int DEBUGEE_CORE = 1;
protected static final int DEBUGEE_REMOTE = 2;
// 流程模式 MODE_FLAGS /MODE_SYSPROPS/MODE_BOTH
private int mode;
// 只打印flag参数
public static final int MODE_FLAGS = 0;
// 只打印系统属性
public static final int MODE_SYSPROPS = 1;
// flag参数和系统属性都打印
public static final int MODE_BOTH = 2;
2.3 构造器
Tool
public Tool() {
}
public Tool(JVMDebugger d) {
jvmDebugger = d;
}
JInfo
public JInfo() {
super();
}
public JInfo(int m) {
mode = m;
}
public JInfo(JVMDebugger d) {
super(d);
}
2.4 方法
main方法作为Jinfo的入口。
- 对args参数校验,不通过的会打印使用帮助信息。同时会根据args生成mode。
- 通过参数决定debugeeType。使用HotSpotAgent对应的attach方法,setupDebugger、setupVM
- 根据不同的model,返回不同的数据
- model取值
MODE_BOTH: args个数为1,首字母不是-;args个数为2或3,首参数不为-flags、-sysprops、-
MODE_FLAGS: args个数为2或3.首参数为-flags
MODE_SYSPROPS:args个数为2或3.首参数为-sysprops
debugeeType取值
DEBUGEE_PID: args参数为1,首参数为int
DEBUGEE_REMOTE: args参数为1, 首参数不为int
DEBUGEE_CORE: args参数为2 - run返回
MODE_FLAGS:printVMFlags。VM.getVM().getCommandLineFlags()、Arguments.getJVMFlags()、Arguments.getJVMArgs()
MODE_SYSPROPS: SysPropsDumper。
VM.getVM().getSystemProperties()
MODE_BOTH:SysPropsDumper、printVMFlags