首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA_TOOL_OPTIONS最大长度

JAVA_TOOL_OPTIONS最大长度
EN

Stack Overflow用户
提问于 2017-01-22 14:32:33
回答 1查看 1.2K关注 0票数 4

我有一个带有Hello.java的简单jar:

代码语言:javascript
复制
class Hello {
   public static void main(String[] a) {
      System.out.println("Hello world!");
   }
}

我想通过JAVA_TOOL_OPTIONS传递一些选项。如果$JAVA_TOOL_OPTIONS长度的值小于或等于1024,则获取:

代码语言:javascript
复制
$export JAVA_TOOL_OPTIONS=$(for i in {1..43}; do echo -n "-Dmyapp.opt${i}="123456789" "; done)
$ echo $JAVA_TOOL_OPTIONS | wc -c
1023

java -jar hello.jar
Picked up JAVA_TOOL_OPTIONS: -Dmyapp.opt1=123456789 -Dmyapp.opt2=123456789 -Dmyapp.opt3=123456789 -Dmyapp.opt4=123456789 -Dmyapp.opt5=123456789 -Dmyapp.opt6=123456789 -Dmyapp.opt7=123456789 -Dmyapp.opt8=123456789 -Dmyapp.opt9=123456789 -Dmyapp.opt10=123456789 -Dmyapp.opt11=123456789 -Dmyapp.opt12=123456789 -Dmyapp.opt13=123456789 -Dmyapp.opt14=123456789 -Dmyapp.opt15=123456789 -Dmyapp.opt16=123456789 -Dmyapp.opt17=123456789 -Dmyapp.opt18=123456789 -Dmyapp.opt19=123456789 -Dmyapp.opt20=123456789 -Dmyapp.opt21=123456789 -Dmyapp.opt22=123456789 -Dmyapp.opt23=123456789 -Dmyapp.opt24=123456789 -Dmyapp.opt25=123456789 -Dmyapp.opt26=123456789 -Dmyapp.opt27=123456789 -Dmyapp.opt28=123456789 -Dmyapp.opt29=123456789 -Dmyapp.opt30=123456789 -Dmyapp.opt31=123456789 -Dmyapp.opt32=123456789 -Dmyapp.opt33=123456789 -Dmyapp.opt34=123456789 -Dmyapp.opt35=123456789 -Dmyapp.opt36=123456789 -Dmyapp.opt37=123456789 -Dmyapp.opt38=123456789 -Dmyapp.opt39=123456789 -Dmyapp.opt40=123456789 -Dmyapp.opt41=123456789 -Dmyapp.opt42=123456789 -Dmyapp.opt43=123456789
Hello world!

如果$JAVA_TOOL_OPTIONS长度的值大于1024,则忽略它:

代码语言:javascript
复制
$export JAVA_TOOL_OPTIONS+="$JAVA_TOOL_OPTIONS -Dmyapp.opt44=123456789"
$ echo $JAVA_TOOL_OPTIONS | wc -c
2070

$ java -jar hello.jar
Hello world!

JAVA_TOOL_OPTIONS字符长度限制从何而来?是否有可能超过1024个焦炭的限制?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-22 14:37:28

这是个有趣的问题!如果您检查OpenJDK v7的源代码,特别是命令行参数解析器,您将看到:

代码语言:javascript
复制
jint Arguments::parse_options_environment_variable(const char* name, SysClassPath* scp_p, bool* scp_assembly_required_p) {
  const int N_MAX_OPTIONS = 64;
  const int OPTION_BUFFER_SIZE = 1024;
  char buffer[OPTION_BUFFER_SIZE];

所以缓冲区的大小限制在1024,这与你的实验所证实的完全吻合:-)

但是,我不知道也没有找到任何官方文件来说明为什么存在这一限制。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41792132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档