Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Buffer - Fatal编程技术网

用Java创建一个新数组的成本有多高?

用Java创建一个新数组的成本有多高?,java,arrays,buffer,Java,Arrays,Buffer,如果内容已经作为ByteBuffers提供,那么从它们创建数组的费用是多少 导入java.nio.ByteBuffer; 公共班机 { 公共静态void main(字符串[]args){ ByteBuffer buf1=ByteBuffer.allocate(666);/*(0)*/ ByteBuffer buf2=ByteBuffer.allocate(666);/*(0)*/ ByteBuffer buf3=ByteBuffer.allocate(666);/*(0)*/ ByteBuffe

如果内容已经作为
ByteBuffer
s提供,那么从它们创建数组的费用是多少

导入java.nio.ByteBuffer;
公共班机
{
公共静态void main(字符串[]args){
ByteBuffer buf1=ByteBuffer.allocate(666);/*(0)*/
ByteBuffer buf2=ByteBuffer.allocate(666);/*(0)*/
ByteBuffer buf3=ByteBuffer.allocate(666);/*(0)*/
ByteBuffer arr[]=新的ByteBuffer[]{buf1,buf2,buf3};/*(1)*/
}
}

数组的创建不应该依赖于缓冲区的大小,对吗?

Java中的对象数组实际上是一个引用(指针)数组。从概念上讲,我们认为数组包含三个
ByteBuffer
对象。但实际上,该数组只保存内存中的一个地址,在这个地址中可以找到每个
ByteBuffer
对象

访问阵列需要两个步骤。当访问数组中的元素时,例如
arr[2]
,首先引用位于数组的该位置/插槽中。然后,使用该引用,JVM跳转到内存中引用所指向的特定对象所在的位置

因此,阵列使用的内存非常少。数组不会复制
ByteBuffer
对象。在代码行创建数组之前,内存中的某个地方有三个
ByteBuffer
对象。创建数组后,内存中仍然只有三个相同的
ByteBuffer
对象


顺便说一句,如果您使用
集合
,例如
列表
集合
,而不是数组,情况也是如此。

您要寻找什么类型的答案?我认为这只取决于Java索引引用中buffersObject数组的数量。因此,如果您询问内存中数组的大小是否取决于缓冲区的大小,那么答案是否定的。