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参数处理**: - 在映射文件中,`...
【IT十八掌徐培成】Linux第02天-05.if-for-while-参数处理-shell编程.zip 这个压缩包文件聚焦于Linux系统中的Shell编程,主要涵盖了三个方面:if语句、for循环、while循环以及参数处理。这些是Shell脚本编程的基础,...
09参数处理、# 和 $ 的区别.md
SpringMVC的参数请,整理了常见的参数处理方法
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
go-smart-config这是一个【零配置】的配置文件加载模块和命令行参数处理模块
单片机保存与读取参数处理 单片机系统经常需要存取一些少量的参数,如串口的地址码,波特率,等等,装这些参数通过PC机进行设置,并存储在本地,同时可以利用通讯端口来修改。参数可以存储在EEPROM中,可以放在外挂...
此项目利用argparse处理命令行参数,收集用户信息并将其存储在文本文件中。在此过程中,还详细阐述了argparse的各种配置与使用注意事项。 适合人群:具有一定Python基础的开发初学者或从事系统编程的技术工作者。 ...
MyBatis参数处理是MyBatis框架中非常重要的一个环节,它决定了如何将Java方法的参数映射到SQL语句中。下面将详细介绍MyBatis中不同类型的参数处理方法。 1. **单个参数**: 当只有一个参数时,MyBatis不会做特殊...
标题中的“SQL参数自动填充工具”指的是一个专为简化SQL语句中参数处理而设计的软件工具。在数据库操作中,尤其是使用ORM框架如iBatis时,我们经常需要编写带有参数的SQL查询,这些参数通常用问号(?)表示。在执行...
此外,Spring MVC还支持其他类型的参数处理,如`@PathVariable`用于处理URL路径变量,`@ModelAttribute`用于绑定整个模型对象,以及`@RequestBody`用于解析请求体中的JSON或XML数据等。这些机制使得Spring MVC能够...
8. 动态链接库的使用:导出参数模块采用动态链接库(DLL)的方式来实现参数的解调,这样做的好处是简化了特殊参数处理过程,便于用户根据需要任意输出所需的数值。 9. 设计注意点:在导出参数模块设计时,需要考虑...
1. **设置命令行参数处理**: 在`App.xaml.cs`中,找到`OnStartup`方法。这个方法在应用程序启动时被调用,我们可以在其中获取命令行参数。默认情况下,`StartupEventArgs`对象的`e.Args`属性包含了所有传递给程序...
这种情况下,我们通常会涉及到数据类型转换、函数参数处理、对象解构等技术。 在编程语言中,如JavaScript,函数可以接受任意数量和类型的参数。例如,你可以定义一个函数,它接受一个字符串和一个对象作为参数,这...
使用lua在Nginx服务器中获取get或post参数提供了很高的灵活性和可扩展性,可以满足各种复杂的请求参数处理需求。 在实际应用中,我们可以使用lua脚本来实现各种复杂的逻辑处理,例如身份验证、数据处理、缓存处理...