当前位置: 首页 > article >正文

JVM 之 javac、java、javap 命令详解

目录

一. 前言

二. javac 命令

三. java 命令

四. javap 命令


一. 前言

    在日常工作中,我们新建 Java工程,写好代码后,编译和运行几乎都是通过 IDE(如idea、eclipse)工具完成。但作为 Java开发者还是要了解下 Java虚拟机指令。通过 javac 和 java 执行编译 Java文件和运行class以及jar文件,通过 javap 命令查看编译后的Java字节码。

二. javac 命令

    javac 是 Java 编程语言的编译器,它是 Java Development Kit(JDK)的一部分。javac 命令用于将 Java 源代码文件(扩展名为 .java)编译成 Java 字节码文件(扩展名为 .class),这些字节码文件随后可以由 Java 虚拟机 (JVM) 执行。

    了解 javac 的这些方面对于 Java 开发者来说是很重要的,因为它是 Java 开发过程中的基本工具之一。通过有效地使用 javac,开发者可以确保他们的 Java 程序被正确编译,且在目标 Java 虚拟机上运行无误。

// 命令格式

javac [options] [sourcefiles] [classes] [args]

options 选项如下:

选项含义
-d 目录指定编译器输出 .class 文件的目标目录。如果目录不存在,javac 将尝试创建它。
-classpath 或 -cp 路径设置查找类文件和注释处理器的路径。
-sourcepath 路径指定查找输入源文件的位置。
-target 版本指定生成特定版本的 Java VM 的类文件。例如,如果想生成与 Java 8 兼容的类文件,可以使用 -target 1.8。
-source 版本提供与 -target 选项相对应的源代码的版本支持。
-g生成所有调试信息,包括局部变量的信息。
-Xlint提供对源代码的更全面检查,报告更多警告和潜在的问题。
-encoding 编码指定源文件使用的字符编码,例如 UTF-8。
-bootclasspath 路径覆盖引导类文件的位置。这在与非标准的 Java 运行时环境(JRE)一起使用时特别有用。
-processor指定要使用的注释处理器的名称。
-J 选项直接将选项传递给 JVM。

错误处理:
当源代码中有语法或语义错误时,javac 会报告这些错误,并在可能的情况下给出修改建议。
编译错误必须修正才能成功编译程序。

版本:
javac 的行为和可用选项可能会根据 JDK 的版本略有不同。建议查看使用的 JDK 版本的官方文档了解具体细节。

使用场景:
javac 通常在命令行环境中使用,但也可以在集成开发环境 (IDE) 如 Eclipse 或 IntelliJ IDEA 中间接使用。

三. java 命令

java 命令用来运行 class文件。注意:不能带 .class 后缀!文件夹之间用句点,而非斜杠。

java [-options] class [args...]
// class 为执行类

// 或者

java [-options] -jar jarfile [args...]
// jar 为可执行 jar 文件

options:为Java命令选项,可选参数。
class:为要运行的主类的名称,必需参数。
args:为传入主类的参数,可选参数。用空格隔开。例如,java org.example.Demo a 1 bc 23。

options 选项如下:

选项含义
-d32使用 32 位数据模型 (如果可用)
-d64使用 64 位数据模型 (如果可用)
-server选择 "server" VM。默认 VM 是 server。
-cp <目录和 zip/jar 文件的类搜索路径>目录和 zip/jar 文件的类搜索路径
-classpath <目录和 zip/jar 文件的类搜索路径>用 ; 分隔的目录, JAR 档案和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>设置系统属性
-verbose:[class|gc|jni]启用详细输出
-version输出产品版本并退出
-version:<值>警告: 此功能已过时, 将在未来发行版中删除。需要指定的版本才能运行
-showversion输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search警告: 此功能已过时, 将在未来发行版中删除。在版本搜索中包括/排除用户专用 JRE
-? -help输出此帮助消息
-X输出非标准选项的帮助
-ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
按指定的粒度启用断言
-da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
禁用具有指定粒度的断言
-esa | -enablesystemassertions启用系统断言
-dsa | -disablesystemassertions禁用系统断言
-agentlib:<libname>[=<选项>]加载本机代理库 <libname>,例如 -agentlib:hprof。另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<选项>]按完整路径名加载本机代理库
-javaagent:<jarpath>[=<选项>]加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath>使用指定的图像显示启动屏幕

有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。

注意:使用 java -jar xxx.jar 命令时,无法同时使用 -cp 选项。

四. javap 命令

    javap 是 Java Development Kit(JDK)中的一个命令行工具,它被用作 Java 类文件的反汇编程序。这意味着可以使用 javap 来查看编译后的 Java 字节码,或者更具体地说,查看 .class 文件中的信息。这对于理解 Java 字节码、调试、以及学习 Java 编译器如何工作非常有帮助。

// 用法

javap <options> <classes>

options:为Javap命令选项,可选参数。
classes:为要查看的类的名称,必需参数。注意,不需要指定 .class 扩展名。

options 选项如下:

选项含义
-help  --help  -?输出此用法消息
-version版本信息
-v  -verbose输出附加信息
-l输出行号和本地变量表
-public仅显示公共类和成员
-protected显示受保护的/公共类和成员
-package显示程序包/受保护的/公共类和成员 (默认)
-p  -private显示所有类和成员
-c对代码进行反汇编
-s输出内部类型签名
-sysinfo显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列)
-constants显示最终常量
-classpath <path>指定查找用户类文件的位置
-cp <path>指定查找用户类文件的位置
-bootclasspath <path>覆盖引导类文件的位置

注意事项:
1. javap 仅提供对字节码的静态分析。它不能告诉我们程序的运行时行为。
2. 对于使用高级功能(如泛型)的代码,反汇编的结果可能不易于理解,因为这些结构在字节码中有不同的表示。关于字节码的相关知识请参见《JVM 之 字节码指令》。


http://www.kler.cn/a/146593.html

相关文章:

  • [操作系统] 深入理解约翰·冯·诺伊曼体系
  • CNCF云原生计算基金会
  • 【excel】VBA股票数据获取(搜狐股票)
  • css实现响应式详解
  • 小结:路由器和交换机的指令对比
  • VSCode Live Server 插件安装和使用
  • 2、Mysql基准测试
  • ubuntu20.04配置OpenCV的C++环境
  • 3.前端--HTML标签-文本图像链接【2023.11.25】
  • docker环境日志常用命令
  • AI数字人与虚拟人:区别与应用场景
  • 【机器学习】聚类(二):原型聚类:LVQ聚类(学习向量量化)
  • 新材料制造ERP用哪个好?企业应当如何挑选适用的
  • 基于YOLOv5的视频计数 — 汽车计数实现
  • 论文阅读——MCAN(cvpr2019)
  • Python多线程使用(一)
  • S32K3之看门狗(autosar框架中的watchdog)
  • Redis链表使用
  • 【Web安全】sql注入绕过技法
  • 探索 Vue 中的 bus.$emit:实现组件通信的强大工具
  • c#处理SQLSERVER 中image数量类型为空
  • actual combat 23 —— 通过序列化对字典字段生成字典str字段和对应字典标签值
  • JVM基础篇:垃圾回收
  • 十大排序算法中的插入排序和希尔排序
  • 【UE5】五大基类及其使用
  • 新闻研究导刊杂志社新闻研究导刊杂志新闻研究导刊编辑部2023年第21期目录