Java 中 JAVA_OPTS "-D" 标志的值是否有最大大小限制?



我有一种情况,JVM选项之一-D";旗帜很大,超过1000个字符。这个值的大小有限制吗?

-Dhttp.nonProxyHosts=localhost|127.0.0.1|169.254.169.254|162.31.160.0/20|100.77.147.160/27|100.77.163.160/27|100.77.179.160/27|162.18.168.0/23|162.18.170.0/23|162.18.172.0/23|10.100.0.0/16|.internal|.foobr.com|.execute-api.us-west-2.amazonaws.com|.s3.us-west-2.amazonaws.com|.us-west-2.eks.amazonaws.com|.us-west-2.vpce.amazonaws.com|amazonlinux.us-west-2.amazonaws.com|api.sagemaker.us-west-2.amazonaws.com|cloudformation.us-west-2.amazonaws.com|cloudtrail.us-west-2.amazonaws.com|codebuild-fips.us-west-2.amazonaws.com|codebuild.us-west-2.amazonaws.com|config.us-west-2.amazonaws.com|dynamodb.us-west-2.amazonaws.com|ec2.us-west-2.amazonaws.com|ec2messages.us-west-2.amazonaws.com|elasticloadbalancing.us-west-2.amazonaws.com|events.us-west-2.amazonaws.com|kinesis.us-west-2.amazonaws.com|kms.us-west-2.amazonaws.com|logs.us-west-2.amazonaws.com|monitoring.us-west-2.amazonaws.com|runtime.sagemaker.us-west-2.amazonaws.com|secretsmanager.us-west-2.amazonaws.com|servicecatalog.us-west-2.amazonaws.com|sns.us-west-2.amazonaws.com|ssm.us-west-2.amazonaws.com|ssmmessages.us-west-2.amazonaws.com|sts.us-west-2.amazonaws.com

是和否。这很复杂。但大部分都是好消息。

  • java不在乎;不过,args是以字符串的形式传入的(而不是以来自磁盘的流的形式(,这意味着有一个基于内存的限制。但是,1GB的文本是…很多-D选项。比你现在拥有的要多几个数量级
  • 然而,shell和操作系统当然可以。例如,Windows不能运行长度超过8191个字符的命令。你目前使用了大约1200个字符,所以你可以让你的-D内容比现在长7倍,但之后你就完成了,至少在windows上是这样。在posix上,它依赖于操作系统和shell,但通常也有限制。getconf ARG_MAX通常告诉你它是什么。在我的桌面系统上,它目前是1048576,在我可以访问的随机linux shell上,它是2097152。这对你来说是一个巨大的成长空间
  • 使用@系统可以避免所有问题。您可以编写java @foo.txt,这将导致java可执行文件打开foo.txt,并将此文件的内容用作参数。因此,将您的巨大的-D开关放在一个文件中,然后使用@allThatJazz.txt而不是-Dreallylongcommandlineoption。现在,您可以不再关心操作系统强加的参数限制了
  • 假设-D开关可以通过System.getProperty使用,那么您的限制现在与堆有关。我们谈论的是在它变得笨拙之前的数百兆字节——可能是200000000个字符

相关内容

最新更新