java怎么表示10 2_java -Xmx1G是否表示10 ^ 9或2 ^ 30字节?

小编典典

简短的答案:JVM命令行参数使用的所有内存大小均以传统的二进制单位指定,其中千字节为1024字节,其他以1024为底的幂。

长答案:

在命令行参数的此文档页面上,以下内容适用于所有接受内存大小的参数:

例如,设置大小为8 GB,您可以指定8g,8192m,8388608k,或8589934592作为参数。

对于-Xmx,它提供了以下特定示例:

下面的示例演示如何使用各种单位将分配的最大内存大小设置为80 MB:

-Xmx83886080

-Xmx81920k

-Xmx80m

之前,我想检查文件(我以为你已经有了?),我检查热点的源头,发现内存值在解析SRC /共享/ VM /运行/

arguments.cpp由功能atomull(这似乎代表“

ASCII到内存,无符号长整长整”):

// Parses a memory size specification string.

static bool atomull(const char *s, julong* result) {

julong n = 0;

int args_read = sscanf(s, JULONG_FORMAT, &n);

if (args_read != 1) {

return false;

}

while (*s != '\0' && isdigit(*s)) {

s++;

}

// 4705540: illegal if more characters are found after the first non-digit

if (strlen(s) > 1) {

return false;

}

switch (*s) {

case 'T': case 't':

*result = n * G * K;

// Check for overflow.

if (*result/((julong)G * K) != n) return false;

return true;

case 'G': case 'g':

*result = n * G;

if (*result/G != n) return false;

return true;

case 'M': case 'm':

*result = n * M;

if (*result/M != n) return false;

return true;

case 'K': case 'k':

*result = n * K;

if (*result/K != n) return false;

return true;

case '\0':

*result = n;

return true;

default:

return false;

}

}

const size_t K = 1024;

const size_t M = K*K;

const size_t G = M*K;

所有这些都证实了该文档,只是T后来添加了对TB 的后缀的支持,并且根本没有记录。

使用单位乘数不是强制性的,因此,如果要 十亿个字节

,可以写入-Xmx1000000000。如果您确实使用乘法器,则它们是二进制的,因此-Xmx1G意味着2个30字节或1个RAM。

(这并不十分令人惊讶,因为Java早于IEC追溯重新定义现有单词的尝试。如果IEC仅建议使用限定符“ binary”和“

decimal”来消除存储单元的歧义,那么有时它们的含义就可以避免混乱。不清楚,例如, 二进制千兆字节 (GB 2)= 1024 3字节,

十进制千兆字节 (GB 10)= 1000 3字节,但是不,他们重新定义了每个人都在使用的单词,不可避免地引起混乱,使我们陷入困境这些小丑用语分别是“

gibibyte”,“ tebibyte”和其他。噢,上帝保佑我们。)

2020-11-16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值