Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字节数据类型如何有助于在大型阵列中节省内存_Java_Byte - Fatal编程技术网

Java 字节数据类型如何有助于在大型阵列中节省内存

Java 字节数据类型如何有助于在大型阵列中节省内存,java,byte,Java,Byte,字节数据类型是一个8位有符号2的补码整数。它有 最小值为-128,最大值为127(含)。这个 字节数据类型可用于在大型阵列中节省内存,其中 节省内存实际上很重要。它们也可以用来代替 int,它们的限制有助于澄清代码;事实上 变量的范围是有限的,可以作为文档的一种形式 我在java文档中看到了这一点。我的问题是字节数据类型将如何在大型数组中保存内存?我对此感到困惑 提前感谢….例如,您有一个1000000个整数的数组。如果使用int[],将占用4Mb内存。但是如果你知道所有的值都在-128到127

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

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


提前感谢….

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

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

    byte[] numbers = new byte[40];
    int[] numbers = new int[40];
与我将它们存储在以下位置相比,它将占用更少的空间:

    byte[] numbers = new byte[40];
    int[] numbers = new int[40];
为什么??因为在一个数组中,40个
byte
实例占用40个字节的内存,而40个
int
实例占用40 x 4=160个字节的内存


注意事项:

  • 显然,只有当数字足够小,可以表示为
    byte
    。。。无溢流;i、 e.它们必须在-128到+127之间

  • 这不适用于简单变量。在Java中,
    byte
    变量和
    int
    变量通常各占用4个字节。(这是一个需要大量解释的低级JVM问题…)

  • 我要强调的是,堆内存的分配粒度可能比4字节还要粗。分配粒度通常为8字节。但是,对于大型数组,分配粒度的影响可以忽略不计。同样,出于上述原因,我对数组头的贡献进行了修饰,因为不管数组的基类型如何,贡献头都是相同的


  • 事实上,当您将文件加载到内存中时,通常使用字节数组。这是做这件事的最佳方式。