参数处理


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。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值