APP下载
报价宝  ›  科技  › 

用Java实现JVM第一章《命令列工具》

报价宝 来源:baojiabao.com 发布时间:2019-10-02 16:53:00 10月27日更新
报价宝综合消息用Java实现JVM第一章《命令列工具》

背景描述

为了更好的学习jvm阅读过《Java虚拟机器规范》、《自己动手写Java虚拟机器》,尤其是《自动动手写java虚拟机器》可以更加清晰的看到全貌。对于程式开发者来说学习一个新东西最好事必躬亲,亲力亲为的做出一些demo,只有输出了结果心里才踏实。

Jvm架构图

案例简述

本章节主要是通过编写java程式码,从main方法入口进行获取指令。例如;-version

环境准备

1、jdk 1.8.0

2、IntelliJ IDEA Community Edition 2018.3.1 x64

配置资讯

1、除错配置

2.1、配置位置:Run/Debug Configurations -> program arguments

2.2、配置内容:-version

程式码示例

itstack-demo-jvm-01

├── pom.xml

└── src

└── main

│ └── java

│ └── org.itstack.demo.jvm

│ ├── Cmd.java

│ └── Main.java

└── test

└── java

└── org.itstack.demo.test

└── HelloWorld.java

pom.xml

com.beust

jcommander

1.72

Cmd.java

package org.itstack.demo.jvm;

import com.beust.jcommander.JCommander;

import com.beust.jcommander.Parameter;

import java.util.List;

/**

* http://www.itstack.org

* create by fuzhengwei on 2019/4/24

*/

public class Cmd {

@Parameter(names = {"-?", "-help"}, description = "print help message", order = 3, help = true)

boolean helpFlag = false;

@Parameter(names = "-version", description = "print version and exit", order = 2)

boolean versionFlag = false;

@Parameter(names = {"-cp", "-classpath"}, description = "classpath", order = 1)

String classpath;

@Parameter(description = "main class and args")

List mainClassAndArgs;

boolean ok;

String getMainClass() {

return mainClassAndArgs != null && !mainClassAndArgs.isEmpty()

? mainClassAndArgs.get(0)

: null;

}

List getAppArgs() {

return mainClassAndArgs != null && mainClassAndArgs.size() > 1

? mainClassAndArgs.subList(1, mainClassAndArgs.size())

: null;

}

static Cmd parse(String[] argv) {

Cmd args = new Cmd();

JCommander cmd = JCommander.newBuilder().addObject(args).build();

cmd.parse(argv);

args.ok = true;

return args;

}

}

Main.java

package org.itstack.demo.jvm;

/**

* http://www.itstack.org

* create by fuzhengwei on 2019/4/24

* program arguments:-version

*/

public class Main {

public static void main(String[] args) {

Cmd cmd = Cmd.parse(args);

if (!cmd.ok || cmd.helpFlag) {

System.out.println("Usage: [-options] class [args...]");

return;

}

if (cmd.versionFlag) {

System.out.println("java version "1.8.0"");

return;

}

startJVM(cmd);

}

private static void startJVM(Cmd cmd) {

System.out.printf("classpath:%s class:%s args:%s ", cmd.classpath, cmd.getMainClass(), cmd.getAppArgs());

}

}

测试结果

java version "1.8.0"

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 报价宝 数码相机价格 小米手机价格 华为手机价格 耳机价格