因此,在像C这样的语言中,内存被分为5个不同的部分:OS内核,文本段,静态内存,动态内存和堆栈。像这样:
如果我们在C中声明了一个静态数组,则必须事先指定它的大小,然后再永久确定。该程序将为该阵列分配足够的内存,并按预期将其粘贴在静态数据段中。
但是我注意到在Java中,您可以执行以下操作:
public class Test {
static int[] a = new int[1];
public static void main( String[] args ) {
a = new int[2];
}
}
一切都会如您所愿。我的问题是,为什么这在Java中起作用?
编辑:因此,共识是int[]
Java中的行为int*
与C中的行为更相似。因此,作为后续问题,是否有任何方法可以在Java中的静态内存中分配数组(如果没有,为什么不这样做)?这样不可以更快地访问此类阵列吗?EDIT2:^这是一个新问题:静态类变量存储在内存中的什么位置?
在Java中,无论何时使用单词new
,该对象的内存都会在堆上分配,并返回引用。对于数组也是如此。该int[] a
仅仅是参考new int[1]
。执行此操作时new int[2]
,将分配一个新数组并指向a。需要时将对旧数组进行垃圾回收。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句