而在一般情况,是用于单位-Xmx
,-Xms
和-Xmn
选项(“K”,“M”和“G”,或不太标准的可能性“K”,“m”或“G”)的二进制前缀倍数(即,功率1024),还是1000的幂?
手册说它们代表千字节(kB),兆字节(MB)和千兆字节(GB),表明它们具有原始SIhtml" target="_blank">系统中定义的1000的幂。我的非正式测试(我不太有信心)表明它们的确是千字节(kiB),兆字节(MiB)和千兆字节(GiB),所有幂都是1024。
那哪个是对的?例如,什么Java代码将显示当前大小?
对于RAM大小,使用1024的倍数并不奇怪,因为RAM通常是通过将硬件模块加倍来物理布局的。但是,随着我们获得越来越大的权力,以清晰,标准的方式使用单位变得越来越重要,因为混乱的可能性越来越大。我的JVM也接受单位“
t”,并且1 TiB比1 TB大10%。
注意:如果这些确实是二进制倍数,我建议更新文档和用户界面,使其非常清楚,例如“ 添加字母k或K表示千字节(1024字节),或m或M表示兆字节(
1048576个字节)
”。这就是采用的方法,例如,在Ubuntu中:UnitsPolicy-Ubuntu
Wiki。
简短的答案: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;
}
}
这些常数K
,M
,G
定义在SRC /共享/ VM /实用程序/
globalDefinitions.hpp:
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”和其他。噢,上帝保佑我们。)
注意:有关选项的更多用途,请参见java-启动JVM时的Xms和Xmx参数是什么?。
问题内容: 为什么 初始空间 大于“ 10”的“ 2”? 我在latin1和utf8英语归类中都尝试过: 我知道它与类型有关,因为当它被强制转换时,它可以按预期工作: 这里到底发生了什么? 编辑: 以上所有操作都是在Fedora 13中使用8.4.8完成的。但是我只是在Centos 6中使用9.04进行了测试,结果相同: 数据库清单 新编辑: 这是为了进一步混淆: 问题答案: 我认为Postgre
问题内容: 如果存在一个以上的实现,哪个/更好的维护? 专门用于OAuth 2.0草案12。 问题答案: 来自OAuth Wiki ,似乎有一个名为oauth2-php的 PHP实现,它支持IETF v9草案。由于OAuth2仍是草案,因此可能很难找到更多实现。
40min AK T1 Problem 给定一个长度为n的字符串,进行q次操作,每次操作修改其中一个字符,每次修改后输出极长连续字符的段数,如aabbaaa的段数是3。 Solution set存连续段的(起点、终点、字符),每次修改字符的时候最多影响三个连续段,修改后输出set的大小即可。 T2 Problem 同一天内吃糖果的愉悦度为a1+max(0,a2-1)+max(0,a3-2)+...
问题内容: 据我了解,Java编译器生成“字节代码”,而不是“目标代码”。首先,这是正确的吗? 而且,这就是我的书所说的,我想知道为什么这是正确的。字节码和目标码有什么区别? 问题答案: 字节代码只是Java虚拟机的“目标代码”。它不是 本机 代码(例如x86)。老实说,这些天我很少听到“目标代码”一词-用更具体的术语讲通常更清晰。
好未来【笔试笔经:9-30】: 选择题(14) 1. 二维数组指定为之前元素个数计算。 2.出入栈顺序问题。 3.不是类的成员函数【友元】。 4.【a,b,c,d】是先序遍历,问可以有几个不同的二叉树。 5.合并两个有序链表的最坏时间复杂度。 6.不是HTTP请求方法是:【get,post,delete,update】? 7.先后序遍历顺序相反的二叉树特征【空/单个结点】? 8.套接字的组合是:【