JVM.dll作为了一个引擎性质的dll,外部与其交互的接口除了各个function,
可配置的参数也是很重要的一个途径。
JNI编程中,通过JavaVMOption向JVM传递参数。
HotSpot代码中对于参数的处理主要分为两部分。
一个是由命令行参数解析出各个用户配置的值,并把这个写用户的值存储在内部变量中。
另外一部分就是分散在VM各个地方的对这些内部变量的使用。
对应的代码没有应用高深的技巧,主要是字符串的解析处理,代码主要集中在Arguments.hpp、Arguments.cpp中。
参数传入JVM有三种形式
一:-Dxxx 例如:-Djava.class.path
二:-Xxxx 例如:-Xbootclasspath:...
三:-XX: 例如:-XX:+AggressiveHeap
形式一的参数是对外正式公布的参数。形式二的参数在将来的版本中可能会变化。
形式三的参数属于没有公开的参数,更多是为了出现异常的时候,调试用。
命令行参数经过Arguments class解析后,便存储在JVM的内部变量中,这些变量的定义在
\hotspot\src\share\vm\runtime\globals.hpp
\hotspot\src\share\vm\runtime\globals.cpp中。
因为JVM会编译为product、debug版本,这些版本中有不同的内部变量。所以在C++代码中
使用了宏来定义内部变量。
宏RUNTIME_FLAGS是其主要的宏。
Arguments对参数的处理主要是:Arguments::init_system_properties和Arguments::parse
Arguments::parse
|
|-->Arguments::parse_vm_init_args
|
|-->parse_each_vm_init_arg
Arguments::init_system_properties,初始化系统属性。所谓系统属性是指JVM的系统属性,例如:java.vm.vendor
一个SystemProperty class对应一个系统属性。所有的系统属性以链表的形式存储,
这个链表的root是:Arguments::_system_properties
总结一下
一、JVM对于可配置参数的设计,没有使用特别的设计技巧,刚接触JVM代码的人对此也能很快熟悉。
二、解析参数这个函数parse_each_vm_init_arg的算法也没有特别优化。逻辑框架就是大量的if else。
分享到:
相关推荐
### MFC中命令行参数处理的实现 #### 概述 在Microsoft Foundation Classes (MFC)框架中,处理命令行参数是一项重要的功能,它能够帮助应用程序解析来自用户的输入,并根据这些输入执行相应的操作。本文旨在深入...
在MyBatis框架中,参数处理是一个关键环节,它决定了SQL查询语句如何根据传入的参数进行动态构建。本示例中,我们看到了两种不同的参数处理方式:使用Map和JavaBean。 1. **Map参数处理**: - 在映射文件中,`...
### GCC驱动程序参数处理的技巧详解 #### 引言 GCC(GNU Compiler Collection)作为一款功能强大的开源编译器套件,广泛应用于多种编程语言的编译任务中。其不仅支持C、C++、Objective-C、Fortran、Ada、Go等语言...
【IT十八掌徐培成】Linux第02天-05.if-for-while-参数处理-shell编程.zip 这个压缩包文件聚焦于Linux系统中的Shell编程,主要涵盖了三个方面:if语句、for循环、while循环以及参数处理。这些是Shell脚本编程的基础,...
09参数处理、# 和 $ 的区别.md
java组件开发(18)HTTP请求与参数处理
getopt-php, 用于 命令行 参数处理的PHP库 GetOpt.PHP GetOpt.PHP 是命令行参数处理的库。 它支持PHP版本 5.4和更高版本。特性同时支持短( ( -v ) ) 和长( 例如。 --version ) 选项选项别名。IE 。选项既
本文将详细介绍如何在Python函数中处理关键字参数,包括如何定义接受关键字参数的函数、如何在函数中使用**kwargs收集未明确命名的关键字参数,以及如何利用这些参数进行复杂的数据处理。 关键字参数是Python函数的...
【IT十八掌徐培成】Linux第02天-01.参数处理-nc-if-export.zip
单片机保存与读取参数处理 单片机系统经常需要存取一些少量的参数,如串口的地址码,波特率,等等,装这些参数通过PC机进行设置,并存储在本地,同时可以利用通讯端口来修改。参数可以存储在EEPROM中,可以放在外挂...
此项目利用argparse处理命令行参数,收集用户信息并将其存储在文本文件中。在此过程中,还详细阐述了argparse的各种配置与使用注意事项。 适合人群:具有一定Python基础的开发初学者或从事系统编程的技术工作者。 ...
这些可变长参数处理函数在编写灵活且适应性强的PHP函数时非常有用。它们允许你创建能够处理任意数量参数的函数,而不必预先定义所有可能的参数组合。在处理用户输入、动态配置或者需要进行不同操作的数据时,这样的...
在批处理(BAT)脚本中,我们经常需要通过命令行参数传递信息给脚本执行。通常情况下,批处理可以直接接收最多10个参数,分别用%0到%9来表示,其中%0代表脚本本身。...根据实际需求,可以选择适合的方法进行参数处理。
标题中的“SQL参数自动填充工具”指的是一个专为简化SQL语句中参数处理而设计的软件工具。在数据库操作中,尤其是使用ORM框架如iBatis时,我们经常需要编写带有参数的SQL查询,这些参数通常用问号(?)表示。在执行...
此外,Spring MVC还支持其他类型的参数处理,如`@PathVariable`用于处理URL路径变量,`@ModelAttribute`用于绑定整个模型对象,以及`@RequestBody`用于解析请求体中的JSON或XML数据等。这些机制使得Spring MVC能够...
在页面的url中使用encodeURI(encodeURI(中文)),对中文... 您可能感兴趣的文章:js将json格式的对象拼接成复杂的url参数方法js的form表单提交url传参数(包含+等特殊字符)的两种解决方法JS根据key值获取URL中的参数值及
8. 动态链接库的使用:导出参数模块采用动态链接库(DLL)的方式来实现参数的解调,这样做的好处是简化了特殊参数处理过程,便于用户根据需要任意输出所需的数值。 9. 设计注意点:在导出参数模块设计时,需要考虑...
因此,Node.js社区出现了一些模块来简化命令行参数处理,其中一个非常流行的模块就是commander。 commander是一个为Node.js项目打造的命令行参数解析器,它使得定义命令行接口变得简单。它能够解析命令行参数,生成...
1. **设置命令行参数处理**: 在`App.xaml.cs`中,找到`OnStartup`方法。这个方法在应用程序启动时被调用,我们可以在其中获取命令行参数。默认情况下,`StartupEventArgs`对象的`e.Args`属性包含了所有传递给程序...