静态数组如何存储在Java内存中?

tskuzzy:

因此,在像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:^这是一个新问题:静态类变量存储在内存中的什么位置?

阿米尔(Amir Raminfar):

在Java中,无论何时使用单词new,该对象的内存都会在堆上分配,并返回引用。对于数组也是如此。int[] a仅仅是参考new int[1]执行此操作时new int[2],将分配一个新数组并指向a。需要时将对旧数组进行垃圾回收。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章