`
李静波
  • 浏览: 53983 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

参数处理

阅读更多

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。
分享到:
评论
1 楼 yueximing 2006-12-13  
强烈关注ing~~~~老大,多发些文章供大家学习学习~~~~
小弟用java开发过一段时间,现在学习com/com+,corba,ice等中间件,小弟QQ:350692219,有机会多向老大学习~~~~

相关推荐

    MFC中命令行参数处理的实现.pdf

    ### MFC中命令行参数处理的实现 #### 概述 在Microsoft Foundation Classes (MFC)框架中,处理命令行参数是一项重要的功能,它能够帮助应用程序解析来自用户的输入,并根据这些输入执行相应的操作。本文旨在深入...

    MyBatis参数处理.docx

    在MyBatis框架中,参数处理是一个关键环节,它决定了SQL查询语句如何根据传入的参数进行动态构建。本示例中,我们看到了两种不同的参数处理方式:使用Map和JavaBean。 1. **Map参数处理**: - 在映射文件中,`...

    基于MATLAB的三维地震参数处理研究.pdf

    【基于MATLAB的三维地震参数处理研究】 MATLAB是一种强大的多领域计算环境,尤其在数据分析、数值计算和可视化方面表现出色。在石油地质学中,MATLAB被广泛应用于处理三维地震参数,以揭示储层特性,如沉积相、流体...

    Node.js-轻量级url参数处理兼容浏览器和Node.js环境

    本主题聚焦于"Node.js-轻量级url参数处理兼容浏览器和Node.js环境",这意味着我们将讨论如何在Node.js以及浏览器环境中处理URL参数。URL(统一资源定位符)是互联网上资源的唯一地址,而URL参数则用于传递额外的信息...

    nodejs命令行参数处理模块commander使用实例.doc

    nodejs命令行参数处理模块commander使用实例.doc

    09参数处理、# 和 $ 的区别.md

    09参数处理、# 和 $ 的区别.md

    SpringMVC请求参数处理-2021-04-09.txt

    SpringMVC的参数请,整理了常见的参数处理方法

    getopt-php, 用于 命令行 参数处理的PHP库.zip

    getopt-php, 用于 命令行 参数处理的PHP库 GetOpt.PHP GetOpt.PHP 是命令行参数处理的库。 它支持PHP版本 5.4和更高版本。特性同时支持短( ( -v ) ) 和长( 例如。 --version ) 选项选项别名。IE 。选项既

    jsp中URL传递中文参数的处理方法

    在页面的url中使用encodeURI(encodeURI(中文)),对中文... 您可能感兴趣的文章:js将json格式的对象拼接成复杂的url参数方法js的form表单提交url传参数(包含+等特殊字符)的两种解决方法JS根据key值获取URL中的参数值及

    Go-go-smart-config这是一个零配置的配置文件加载模块和命令行参数处理模块

    go-smart-config这是一个【零配置】的配置文件加载模块和命令行参数处理模块

    单片机保存与读取参数处理

    单片机保存与读取参数处理 单片机系统经常需要存取一些少量的参数,如串口的地址码,波特率,等等,装这些参数通过PC机进行设置,并存储在本地,同时可以利用通讯端口来修改。参数可以存储在EEPROM中,可以放在外挂...

    Python命令行参数处理及argparse应用实例(包含详细的完整的程序和数据)

    此项目利用argparse处理命令行参数,收集用户信息并将其存储在文本文件中。在此过程中,还详细阐述了argparse的各种配置与使用注意事项。 适合人群:具有一定Python基础的开发初学者或从事系统编程的技术工作者。 ...

    MyBatis参数处理实现方法汇总

    MyBatis参数处理是MyBatis框架中非常重要的一个环节,它决定了如何将Java方法的参数映射到SQL语句中。下面将详细介绍MyBatis中不同类型的参数处理方法。 1. **单个参数**: 当只有一个参数时,MyBatis不会做特殊...

    php可变长参数处理函数详解

    这些可变长参数处理函数在编写灵活且适应性强的PHP函数时非常有用。它们允许你创建能够处理任意数量参数的函数,而不必预先定义所有可能的参数组合。在处理用户输入、动态配置或者需要进行不同操作的数据时,这样的...

    C#应用处理传入参数 - 开源研究

    一、命令行参数处理 在开发控制台应用程序时,我们常常需要处理命令行参数。C#通过`System.Environment`类的`Args`属性提供了一个方便的方式来获取这些参数。例如: ```csharp class Program { static void Main...

    SQL参数自动填充工具

    标题中的“SQL参数自动填充工具”指的是一个专为简化SQL语句中参数处理而设计的软件工具。在数据库操作中,尤其是使用ORM框架如iBatis时,我们经常需要编写带有参数的SQL查询,这些参数通常用问号(?)表示。在执行...

    SpringMVC——处理器方法参数的处理.docx

    此外,Spring MVC还支持其他类型的参数处理,如`@PathVariable`用于处理URL路径变量,`@ModelAttribute`用于绑定整个模型对象,以及`@RequestBody`用于解析请求体中的JSON或XML数据等。这些机制使得Spring MVC能够...

    WPf命令行参数事例

    1. **设置命令行参数处理**: 在`App.xaml.cs`中,找到`OnStartup`方法。这个方法在应用程序启动时被调用,我们可以在其中获取命令行参数。默认情况下,`StartupEventArgs`对象的`e.Args`属性包含了所有传递给程序...

    Nginx服务器中使用lua获取get或post参数.docx

    使用lua在Nginx服务器中获取get或post参数提供了很高的灵活性和可扩展性,可以满足各种复杂的请求参数处理需求。 在实际应用中,我们可以使用lua脚本来实现各种复杂的逻辑处理,例如身份验证、数据处理、缓存处理...

Global site tag (gtag.js) - Google Analytics