总的来说,
手册上说它们表示千字节(kB)、兆字节(MB)和千兆字节(GB),这表明它们是原始国际单位制中定义的1000的幂。我的非正式测试(我不是很有信心)表明它们实际上是基比字节(KiB)、米比字节(MiB)和吉比字节(GiB),都是1024的幂。
那么哪一个才是正确的?例如,什么Java代码可以显示当前大小?
对于内存大小使用1024的倍数并不奇怪,因为内存通常是通过加倍硬件模块来物理布局的。但随着我们越来越接近更大的幂,使用清晰和标准的单位就变得越来越重要,因为混淆的可能性也随之增加。我的JVM还接受“t”这个单位,1 TiB比1 TB大10%。
注意:如果这些确实是二进制倍数,我建议更新文档和用户界面,非常明确地说明这一点,并提供如“附加字母k或K以表示基比字节(1024字节),或m或M以表示米比字节(1048576字节)”等示例。例如,在Ubuntu中采用了这种方法:UnitsPolicy - Ubuntu Wiki。
注意:有关选项用于什么的更多信息,请参见java - What are the Xms and Xmx parameters when starting JVMs?。
-Xmx
、-Xms
和-Xmn
选项使用的单位(“k”、“M”和“G”,或较少用的“K”、“m”或“g”)是二进制前缀倍数(即1024的幂),还是1000的幂?手册上说它们表示千字节(kB)、兆字节(MB)和千兆字节(GB),这表明它们是原始国际单位制中定义的1000的幂。我的非正式测试(我不是很有信心)表明它们实际上是基比字节(KiB)、米比字节(MiB)和吉比字节(GiB),都是1024的幂。
那么哪一个才是正确的?例如,什么Java代码可以显示当前大小?
对于内存大小使用1024的倍数并不奇怪,因为内存通常是通过加倍硬件模块来物理布局的。但随着我们越来越接近更大的幂,使用清晰和标准的单位就变得越来越重要,因为混淆的可能性也随之增加。我的JVM还接受“t”这个单位,1 TiB比1 TB大10%。
注意:如果这些确实是二进制倍数,我建议更新文档和用户界面,非常明确地说明这一点,并提供如“附加字母k或K以表示基比字节(1024字节),或m或M以表示米比字节(1048576字节)”等示例。例如,在Ubuntu中采用了这种方法:UnitsPolicy - Ubuntu Wiki。
注意:有关选项用于什么的更多信息,请参见java - What are the Xms and Xmx parameters when starting JVMs?。