猿问

Java 对象数组的内存模型是怎样的?

Java 引用类型数组内存模型,下面哪一种是正确的?对象数组的每个元素都会在栈内存中有一个引用吗?

看了两个老师的教程,画内存图的时候有点不一样

相关代码

Person[] per = new Person[]{        new Person("A", 1),        new Person("B", 2),        new Person("C", 3)        
    };

版本1:

版本2:
https://img1.mukewang.com/5c50565d0001705d08000486.jpg

我个人觉得两个都对,只是第一是简化版,如果按我的理解,更倾向于版本2。只是有一点疑惑,数组存的是匿名对象,匿名对象会在栈中有引用吗?


海绵宝宝撒
浏览 1375回答 2
2回答

PIPIONE

1是对的,2是错的。java对象在堆中分配,数组是对象,所以分配在堆中

慕斯王

图一是正确的,栈里面不存在per[0],pr[1],per[2]这些引用,看一下Person[] per = new Person[]{        new Person("A", 1),        new Person("B", 2),        new Person("C", 3)             };这段代码在局部变量表只占per一个槽数,locals=1,可以使用javap -v看一下
随时随地看视频慕课网APP

相关分类

Java
我要回答