jinfo介绍[通俗易懂]

jinfo介绍[通俗易懂]1.jinfo1.1简介jinfo用于打印java的配置信息,这些配置信息包括:javasystempropertiesjvm命令行参数通过查看这些配置信息,可以了解java进程的运

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1. jinfo

1.1 简介

jinfo用于打印java的配置信息,这些配置信息包括:

  • java system properties
  • jvm命令行参数

通过查看这些配置信息,可以了解java进程的运行时环境,例如加载类的顺序、jvm配置情况等。

1.2 使用

  • jinfo pid . 即不加参数,jinfo后面直接跟进程id。会同时打印jvm命令行参数和java system properties
  • jinfo -flags pid . 只打印jvm命令行参数
  • jinfo -sysprops pid . 只打印java system properties

举例来说,我们运行如下java程序

java -jar -Dtest test-1.0-SNAPSHOT.jar &

其中配置了一个jvm命令行参数-Dtest,注意jvm命令行参数要再jar包前面,否则就成为了main函数的参数了。 使用

jps -lm

查看进程id,这里得到的进程id是3107778,使用

jinfo 3107778

打印进程的配置信息,包括jvm参数和java system properties。打印结果大致如下:

Attaching to process ID 3107778, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11
Java System Properties:  // 第一部分: Java System Properties

java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.131-b11
test = // 重点
....// 忽略中间的system properties

sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
sun.cpu.isalist =

VM Flags: // 第二部分:jvm 参数
Non-default VM flags: -XX:CICompilerCount=15 -XX:InitialHeapSize=2147483648 -XX:MaxHeapSize=32210157568 -XX:MaxNewSize=10736369664 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=715653120 -XX:OldSize=1431830528 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -Dtest  // jvm命令行参数

2. java system properties

在平常的一些项目中,我们会使用Properties来保存一些配置信息。同样在java本身也会用Properties来保存java平台的配置信息,这个就是java system properties。System properties主要包含了current user、the current version of the Java runtime、jvm加载的类的路径等信息。

这个Properties就在java.lang.System类中。可以通过查看代码看到System中有个props的属性,这个便是刚才提到的java system properties:

public final class System {
    //....
    /**
     * System properties. The following properties are guaranteed to be defined:
     * <dl>
     * <dt>java.version         <dd>Java version number
     * <dt>java.vendor          <dd>Java vendor specific string
     * <dt>java.vendor.url      <dd>Java vendor URL
     * <dt>java.home            <dd>Java installation directory
     * <dt>java.class.version   <dd>Java class version number
     * <dt>java.class.path      <dd>Java classpath
     * <dt>os.name              <dd>Operating System Name
     * <dt>os.arch              <dd>Operating System Architecture
     * <dt>os.version           <dd>Operating System Version
     * <dt>file.separator       <dd>File separator ("/" on Unix)
     * <dt>path.separator       <dd>Path separator (":" on Unix)
     * <dt>line.separator       <dd>Line separator ("\n" on Unix)
     * <dt>user.name            <dd>User account name
     * <dt>user.home            <dd>User home directory
     * <dt>user.dir             <dd>User's current working directory
     * </dl>
     */

    private static Properties props;
    //...
}

System提供了相应的get/set方法来修改该类,但是使用set修改System properties被视为是危险的动作,而且会有一些安全限制。那么如果我们想在java启动的时候通过jvm命令行参数来配置system properties应该怎么做呢?答案是使用类似上面启动java程序的参数,即

-Dkey=value

这样的格式。如果不写=value,则得到的为空字符串。例如上面提到的启动java程序,配置了-Dtest:

java -jar -Dtest test-1.0-SNAPSHOT.jar &

在其jinfo的输出中,我们可以看到jvm命令行参数是-Dtest,同时在system properties中存在“test=”的properties项。

假设上述程序main函数如下:

public static void main(String[] args) throws Exception {
        String s = System.getProperties().getProperty("test");
        if (s == null) {
            System.out.println("null");
        }
        System.out.println("DDD " + s);
}

则得到s为””,最终打印结果是,如果配置启动命令为

java -jar -Dtest=aaa test-1.0-SNAPSHOT.jar &

则上述代码运行结果为DDD aaa。 如果value有空格,则需要加引号(e.g. -Dfoo=”foo bar”)

3. 参考

  1. jinfo man page
  2. https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
  3. https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166829.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月1日 上午7:46
下一篇 2022年8月1日 上午8:00


相关推荐

  • android模拟器加速,配置android模拟器加速(虚拟化加速)

    android模拟器加速,配置android模拟器加速(虚拟化加速)使用 android 官网的配置虚拟机加速的技术能使得模拟器达到甚至超越真实的手机运行速度 也能大大提高工程部署速度 本文引用地址 http www eepw com cn article 201610 305387 htm 具体实现步骤 1 安装虚拟化驱动 打开 AndroidSDKMa gt selectExtras gt IntelHardwar

    2026年3月26日
    2
  • 高通IMEI写入最新版_博思得g3106打印机设置

    高通IMEI写入最新版_博思得g3106打印机设置检查自己写的pdaf驱动是否正确主要就是依据打印出来的pdaflog,那如果log出不来肯定是有问题的,接下来说下如何排查问题:1:首先我们要检查sensor驱动h文件有没有打开pdaf,如果没有打开pdaf的log肯定出不来的。2:然后要检查otp驱动是否加载正确,因为otp中有pdaf相关的校正。3:效果目录3A文件的log有没有打开(举个例子)sen

    2025年8月29日
    9
  • idea maven创建springboot项目_springboot项目

    idea maven创建springboot项目_springboot项目前言:如今springboot越来越火,越来越多的公司选择使用springboot作为项目的开发框架,其设计目的就是用来简化spring项目的搭建和开发过程,省略了传统spring、springmvc项目繁琐的配置,可以让开发人员快速上手。下面详细说明下如何使用idea创建我们的第一个springboot项目:首先打开idea主界面选择CreateNewProject在弹…

    2022年10月13日
    4
  • Android学习笔记(四十):Preference的使用

    Android学习笔记(四十):Preference的使用

    2021年12月8日
    41
  • 关于pycharm安装第三方库的一些方法

    关于pycharm安装第三方库的一些方法关于 pycharm 安装第三方库的一些方法 方法一 利用 pycharm 自带功能进行安装 以下截图来自 pycharm2018 1 4 点击 file gt nbsp gt Settings gt Projectuntit gt ProjectInter gt 点击右边加号 gt 搜索期望安装的第三方库然后点击左下角的 amp g

    2026年3月27日
    2
  • MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件「建议收藏」

    MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件「建议收藏」标签控件应用【Tab Control 标签控件】 标签控件也比较常见。它可以把多个页面集成到一个窗口中, 每个页面对应一个标签,用户点击某个标签时,它对应的页 面就会显示。 使用标签控件我们可以同时加载多个有关联的页面,用 户只需点击标签即可实现页面切换,方便灵活的进行操作。 每个标签除了可以显示标签文本,还可以显示图标。 标签控件相当于是一个页面的容器,可以容纳多个对话 框,而且一般也只容纳对…

    2022年8月18日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号