这要根据对象的类型和对象在Java类中的位置来判断
对象类型 | 对象在Java类中的位置 | 分配在JVM内存结构中的位置 |
---|---|---|
普通对象 | 方法体外(全局) | 堆 |
普通对象 | 方法体内(局部) | 堆 |
基本数据类型 | 方法体外(全局) | 堆 |
基本数据类型 | 方法体内(局部) | 栈 |
总结
可以知道对象都是存在堆上的(这里不考虑逃逸分析),其他地方拥有的只不过是对象的一个引用,而基础数据类型则根据在Java类中的位置来做具体分配,这里要强调的是,数组不是基础数据类型,而是对象,所以像int[]这样的数组其实也是分配在堆上的。