6

字节数据类型是一个 8 位有符号二进制补码整数。它的最小值为 -128,最大值为 127(含)。字节数据类型可用于在大型数组中节省内存,其中内存节省实际上很重要。它们也可以用来代替 int ,它们的限制有助于澄清您的代码;变量的范围有限这一事实可以作为一种文档形式。

我在 java 文档中看到了这一点。我的问题是字节数​​据类型如何将内存保存在大数组中?我对此感到困惑

提前致谢....

4

2 回答 2

10

它所说的真的很简单。

假设我有 40 个“数字”要存储。如果我将它们存储在以下位置:

    byte[] numbers = new byte[40];

与将它们存储在以下位置相比,它将占用更少的空间:

    int[] numbers = new int[40];

为什么?因为在一个数组中,40 个byte实例占用 40 字节内存,但 40 个int实例占用 40 x 4 = 160 字节内存。


注意事项:

  1. 显然,这仅在数字小到可以表示为byte... 而不会溢出时才有效;即它们必须在 -128 到 +127 的范围内

  2. 这不适用于简单变量。在 Java 中,一个byte变量和一个int变量通常每个占用 4 个字节。(这是一个低级 JVM 的东西,需要大量解释......)

  3. 我忽略了堆内存可能以比 4 字节更粗的粒度分配的事实。分配粒度通常为 8 个字节。但是,对于大型数组,分配粒度的贡献可以忽略不计。同样,出于上述原因,我忽略了数组标题的贡献,并且因为贡献标题是相同的,而与数组的基本类型无关。

于 2013-05-18T06:27:45.153 回答
1

例如,您有一个包含 1000000 个整数的数组。如果你使用 int[] 它将占用 4Mb 的内存。但是如果你知道所有值都在 -128 到 127 的范围内,你可以使用 byte[] 它将占用 4 倍的内存

于 2013-05-18T06:27:08.993 回答