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

JVM源码剖析之Java命令行参数全解

最近,有一位网友询问关于Java命令行参数方面的问题,因为在Java中参数有很多种,有不少的读者一直没弄明白,所以特意写下此篇文章。

此篇文章分2大块,第一块是不同参数的解释,第2块就是JVM源码论证~

1-1 Java参数全解

 

图1-1给出了运行Java代码的命令行,其中包括了启动命令和不同种类的参数,分别用红、黄、黑、绿、蓝、粉 6种颜色代表。

命令

这个相信是一位Java程序员就能明白,使用javac命令编译Java代码,使用java命令运行class文件

命令参数

命令参数,从字面意思也能够理解,就是java命令携带的参数,读者可以使用java命令查看.

而这里特意使用 -D  参数,因为 -D 参数后面的内容会被解析成系统属性,也就是System.getProperty 方法可以拿到的属性。关于System.getProperty底层这里不做描述,因为一看便知。

JVM启动时参数

-Xms、-Xmx、-Xss、-Xint这系列参数笔者称为 "JVM启动时参数" ,为什么这么说呢?因为在JVM启动时会去解析-Xms、-Xmx、-Xss、-Xint这系列参数,解析出来的值会赋值到 "JVM内部运行时参数" 实际上JVM内部控制大小使用的是 "JVM内部运行时参数" ,所以-Xms、-Xmx、-Xss、-Xint 这系列参数仅仅是一层抽象,因为缩写、很短、很容易记忆,反而 "JVM内部运行时参数" 很长不好记忆。

JVM内部运行时参数

"JVM内部运行时参数"上面已经提及到,可能此刻很多读者区分不明白 " JVM启动时参数 " 和  "JVM内部运行时参数"  在src/share/vm/runtime/arguments.cpp 文件 parse_each_vm_init_arg中解析-Xmx参数是这样实现的。

// 解析 -Xmx
else if (match_option(option, "-Xmx", &tail) || match_option(option, "-XX:MaxHeapSize=", &tail)) { julong long_max_heap_size = 0;// 把-Xmx后面紧跟的数值赋值到long_max_heap_sizeArgsRange errcode = parse_memory_size(tail, &long_max_heap_size, 1);…………把long_max_heap_size赋值到全局的MaxHeapSize参数中FLAG_SET_CMDLINE(uintx, MaxHeapSize, (uintx)long_max_heap_size);
}

可以很清楚的看到,把-Xmx的值赋值到MaxHeapSize中,而这里的-Xmx是" JVM启动时参数 "MaxHeapSize是"JVM内部运行时参数"

而"JVM内部运行时参数"可以使用 -XX: 的形式设置。

所以 -XX:MaxHeapSize=1024m 和 -Xmx1024m没任何区别,而后续使用MaxHeapSize来设置堆大小。

启动类

设置启动类这个无需多提,但是有一点一定要注意,图1-1的案例来看,如果添加了很多参数的情况下,启动类的位置一定要在 "main方法参数"之前 (命令参数、JVM启动参数、JVM内部运行时参数要在启动类之前),也即启动类后面的参数都是 "main方法参数"。

main方法参数

这里很容易理解,你的启动类中存在main方法,而main方法传入一个String[]数组,这个字符串数组中就是参数。 上文有提及到,启动类后面的参数都是 "main方法参数"

案例论证

下面是 图1-1 的启动类代码,可以很清楚的看到,-D传入的参数使用System.getProperty方法拿到,main方法传入的数组的内容是csdn、hotspot 。这也完美论证了~!

public class Demo {public static void main(String[] args) {for (int i = 0; i < args.length; i++) {System.out.println(args[i]);}System.out.println("liha参数内容:"+System.getProperty("liha"));}
}
输出结果:
csdn
hotspot
liha参数内容:lihaha

相关文章:

JVM源码剖析之Java命令行参数全解

最近&#xff0c;有一位网友询问关于Java命令行参数方面的问题&#xff0c;因为在Java中参数有很多种&#xff0c;有不少的读者一直没弄明白&#xff0c;所以特意写下此篇文章。 此篇文章分2大块&#xff0c;第一块是不同参数的解释&#xff0c;第2块就是JVM源码论证&#xff…...

抽象工厂模式-java实现

介绍 抽象工厂模式基于工厂方法模式引入了“产品族”的概念&#xff0c;即我们认为具体产品是固定的&#xff0c;具体产品存在等级之分&#xff0c;比如我们常说的手机&#xff0c;有“青春版”&#xff0c;“至尊版”&#xff0c;“至臻版”。一个产品有多个版本族。这时候&a…...

机器学习笔记 - 基于Python发现最佳计算机视觉模型的神经架构搜索技术NAS

一、简述 近年来,随着深度学习技术的兴起,计算机视觉领域取得了巨大进步。事实证明,卷积神经网络 (CNN) 在图像识别任务中异常强大,但针对特定问题设计最佳架构仍然是一项具有挑战性的任务。这就是神经架构搜索(NAS)发挥作用的地方。NAS 是一种尖端技术,可以自动发现高性…...

机器学习---自编码器

自编码器过程 输入一个图片&#xff0c;经过encoder变成一个向量&#xff0c;再通过decoder将这个向量反向生成输入的图片。 这里我们希望输入和输出越接近越好。这个过程我们称为重建。 特点&#xff1a;不需要任何的标注资料。 在2006年这个思想就被提出来了&#xff1a; …...

vuejs 设计与实现 - 渲染器的设计

渲染器与响应式系统的结合 本节&#xff0c;我们暂时将渲染器限定在 DOM 平台。既然渲染器用来渲染真实 DOM 元素&#xff0c;那么严格来说&#xff0c;下面的函数就是一个合格的渲染器: // 渲染器&#xff1a; function renderer(domString, container) {container.innerHTM…...

openCV 图像对象的创建和赋值

文章目录 一、赋值二、克隆三、拷贝四、初始化 一、赋值 赋值操作是将一个cv::Mat对象的数据复制到另一个对象中。赋值操作使用的是浅拷贝&#xff08;shallow copy&#xff09;&#xff0c;即两个对象共享相同的数据内存。这意味着对一个对象的修改会影响到另一个对象 cv::M…...

idea - 刷新 Git 分支数据 / 命令刷新 Git 分支数据

一、idea - 刷新 Git 分支数据 idea 找到 fetch 选项&#xff0c;重新获取分支数据 二、命令刷新 Git 分支数据 git fetch参考链接 1. 远程Gitlab新建的分支在IDEA里不显示...

线上电影购票选座H5小程序源码开发

搭建一个线上电影购票选座H5小程序源码需要一些基本的技术和步骤。以下是一个大致的搭建过程&#xff0c;可以参考&#xff1a; 1. 确定需求和功能&#xff1a;首先要明确你想要的电影购票选座H5小程序的需求和功能&#xff0c;例如用户登录注册、电影列表展示、选座购票、订单…...

QT正则校验

文章目录 前言一、Qt正则校验1.对输入框进行校验&#xff0c;不允许输入其他字符2.直接校验字符串 二、常用正则校验表达式 前言 项目中会经常遇到需要对字符串进行校验的情况&#xff0c;需要用到正则表达式&#xff08;Regular Expression&#xff0c;通常简写为RegExp、RE等…...

ChatGPT“侵入”校园,教学评价体制受冲击,需作出调整

北密歇根大学的教授奥曼在学生作业中发现了一篇关于世界宗教的“完美论文”。“这篇文章写得比大多数学生都要好......好到不符合我对学生的预期&#xff01;”他去问ChatGPT&#xff1a;“这是你写的吗&#xff1f;”ChatGPT回答&#xff1a;“99.9%的概率是的。” ChatGPT“侵…...

函数的声明和定义

1、函数声明 //告诉编译器有一个函数叫什么&#xff0c;参数是什么&#xff0c;返回类型是什么。但是具体是不是存在&#xff0c;函数声明决定不了。 //函数的声明一般出现在函数的使用之前。要满足先声明后使用。 //函数的声明一般要放在头文件中的。 2、函数的定义 //函数…...

06微服务间的通信方式

一句话导读 微服务设计的一个挑战就是服务间的通信问题&#xff0c;服务间通信理论上可以归结为进程间通信&#xff0c;进程可以是同一个机器上的&#xff0c;也可以是不同机器的。服务可以使用同步请求响应机制通信&#xff0c;也可以使用异步的基于消息中间件间的通信机制。同…...

研发工程师玩转Kubernetes——local型PV和PVC绑定过程中的状态变化

PV全称是PersistentVolume&#xff0c;即持久卷&#xff0c;是由管理员事先准备好的资源。它可以是本地磁盘&#xff0c;也可以是网络磁盘。 PVC全称是PersistentVolumeClaim&#xff0c;即持久卷申领。它表示卷的使用者&#xff0c;对PV的申请。即我们可以认为&#xff0c;PV是…...

HTTP——十一、Web的攻击技术

HTTP 一、针对Web的攻击技术1、HTTP 不具备必要的安全功能2、在客户端即可篡改请求3、针对Web应用的攻击模式 二、因输出值转义不完全引发的安全漏洞1、跨站脚本攻击2、SQL 注入攻击3、OS命令注入攻击4、HTTP首部注入攻击5、邮件首部注入攻击6、目录遍历攻击7、远程文件包含漏洞…...

Python-OpenCV中的图像处理-图像金字塔

Python-OpenCV中的图像处理-图像金字塔 图像金字塔高斯金字塔拉普拉斯金字塔 金字塔图像融合 图像金字塔 同一图像的不同分辨率的子图集合&#xff0c;如果把最大的图像放在底部&#xff0c;最小的放在顶部&#xff0c;看起来像一座金字塔&#xff0c;故而得名图像金字塔。cv2…...

ArcGIS、ENVI、InVEST、FRAGSTATS技术教程

专题一 空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 专题二 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化&#xff1a;地图符号与注…...

Unity-Linux部署WebGL项目MIME类型添加

在以往的文章中有提到过使用IIS部署WebGL添加MIME类型使WebGL项目在浏览器中能够正常加载&#xff0c;那么如果咱们做的是商业项目&#xff0c;往往是需要部署在学校或者云服务器上面的&#xff0c;大部分情况下如果项目有接口或者后台管理系统&#xff0c;后台基本都会使用Lin…...

MySQL:表的约束和基本查询

表的约束 表的约束——为了让插入的数据符合预期。 表的约束很多&#xff0c;这里主要介绍如下几个&#xff1a; null/not null,default, comment, zerofill&#xff0c;primary key&#xff0c;auto_increment&#xff0c;unique key 。 空属性 两个值&#xff1a;null&am…...

mysql统计近7天数据量,,按时间戳分组

可以使用以下 SQL 语句来统计近7天的数据量&#xff0c;并按时间戳分组。如果某一天没有数据&#xff0c;则将其填充为0。 SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp), %Y-%m-%d) AS date,COUNT(*) AS count FROM table_name WHERE timestamp > UNIX_TIMESTAMP(DATE_SUB…...

无涯教程-Perl - endnetent函数

描述 此功能告诉系统您不再希望使用getnetent从网络列表中读取条目。 语法 以下是此函数的简单语法- endnetent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perluse Socket;while ( ($name, $aliases, $addrtype, $net) getnetent() )…...

MogFace人脸检测工具保姆级教程:5分钟搭建本地高精度检测环境

MogFace人脸检测工具保姆级教程&#xff1a;5分钟搭建本地高精度检测环境 1. 为什么选择MogFace进行人脸检测&#xff1f; 人脸检测是计算机视觉领域的基础任务&#xff0c;但实际应用中常遇到各种挑战&#xff1a;小尺寸人脸检测困难、侧脸和遮挡导致漏检、密集人群检测不准…...

RetinaFace在合影场景中的应用:多人脸检测与关键点绘制实战

RetinaFace在合影场景中的应用&#xff1a;多人脸检测与关键点绘制实战 1. 合影场景中的人脸检测挑战 在合影场景中&#xff0c;人脸检测面临着诸多独特挑战&#xff1a; 密集人脸&#xff1a;多人聚集导致人脸间距小&#xff0c;容易造成检测框重叠或漏检尺度差异&#xff…...

OpenClaw替代方案:当Kimi-VL-A3B-Thinking不可用时的应急处理

OpenClaw替代方案&#xff1a;当Kimi-VL-A3B-Thinking不可用时的应急处理 1. 为什么需要制定模型故障应对策略 上周五凌晨3点&#xff0c;我被一阵急促的报警声惊醒。手机屏幕上闪烁着OpenClaw的异常通知——我部署的Kimi-VL-A3B-Thinking模型服务突然不可用。这个模型负责处…...

FireRedASR-AED-L环境配置:CUDA 11.8 + PyTorch 2.1.2 + Transformers 4.41一键集成

FireRedASR-AED-L环境配置&#xff1a;CUDA 11.8 PyTorch 2.1.2 Transformers 4.41一键集成 1. 项目简介 FireRedASR-AED-L是一个基于1.1B参数大模型开发的本地语音识别工具&#xff0c;专为中文、方言和中英混合语音识别而设计。这个工具最大的特点是完全本地运行&#xf…...

RV3028-C7超低功耗RTC深度解析:UNIX时间戳与温度补偿实现

1. RV3028-C7 实时时钟模块深度技术解析RV-3028-C7 是一款面向超低功耗、高可靠性嵌入式应用的SMT封装实时时钟&#xff08;RTC&#xff09;模块。其核心价值不仅在于提供基础的时间保持功能&#xff0c;更在于将高精度时钟源、智能电源管理、非易失性配置存储与事件时间戳能力…...

【国家卫健委《医疗卫生机构数据安全管理指南》强制落地倒计时】:PHP脱敏工具未升级?3类高危场景已触发监管预警!

第一章&#xff1a;国家卫健委《医疗卫生机构数据安全管理指南》强制落地背景与合规红线近年来&#xff0c;医疗健康数据泄露事件频发&#xff0c;患者隐私保护压力陡增。2023年12月&#xff0c;国家卫生健康委员会正式印发《医疗卫生机构数据安全管理指南》&#xff08;国卫办…...

Kook Zimage真实幻想Turbo保姆级教学:WebUI历史记录导出与管理

Kook Zimage真实幻想Turbo保姆级教学&#xff1a;WebUI历史记录导出与管理 1. 项目简介 Kook Zimage真实幻想Turbo是一款专为个人GPU设计的轻量化幻想风格文本生成图像系统。基于Z-Image-Turbo官方极速文生图底座&#xff0c;通过自定义权重清洗与非严格注入方式&#xff0c;…...

第04章-开源鸿蒙的架构概览

第4章 开源鸿蒙的架构概览本章目标&#xff1a;从整体到局部&#xff0c;逐层剖析开源鸿蒙的系统架构&#xff0c;理解各层的职责与协作关系。4.1 整体架构 开源鸿蒙的系统架构采用分层设计&#xff0c;自上而下可以分为四层&#xff1a; ┌─────────────────…...

Pokerobo_PSx:轻量级PS2手柄嵌入式驱动库

1. Pokerobo_PSx 库概述Pokerobo_PSx 是一个专为嵌入式系统设计的轻量级 PS2 DualShock 手柄通信协议栈&#xff0c;面向 STM32、ESP32、nRF52 等主流 MCU 平台&#xff0c;提供完整、稳定、可裁剪的 PlayStation 2 游戏手柄&#xff08;含 DualShock 1/2 及兼容设备&#xff0…...

Swoole Worker进程莫名退出?Linux信号处理、OOM Killer与systemd资源限制的终极对齐方案

第一章&#xff1a;Swoole Worker进程莫名退出&#xff1f;Linux信号处理、OOM Killer与systemd资源限制的终极对齐方案Swoole Worker进程在高并发场景下突然终止&#xff0c;却无明确错误日志&#xff0c;是生产环境高频痛点。根本原因常非代码缺陷&#xff0c;而是底层系统机…...