用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数组的数量。因此,如果您询问内存中数组的大小是否取决于缓冲区的大小,那么答案是否定的。