对于堆栈中,基本数据类型和引用数据类型到底存放在哪里?是线程私有还是线程共享?

变量位于方法中

如果是基本数据类型,放置在栈中,如果是引用类型,引用存在在栈中,new出的对象存储在堆中

变量位于类中(作为成员变量)

1.常量:如果是字符串的,则存放在堆中的字符串常量池,如果是其他类型,则存放在元空间中即本地内存中
2.static 变量 存放在Class对象的末尾,即在堆中
3.其他变量 存储在堆中,无论是基本数据类型还是引用类型,都作为new出的对象的属性一起存储在堆中

另外

另外对于方法区:1.7之前是使用永久代实现的
1.8之后使用元空间将其分为两部分:字符串常量池和静态变量放入堆内存, 方法区(包括类型信息,运行时常量池等)放入元空间(本地内存实现的)
由于1.8后元空间使用本地内存实现,不会出现OOM错误了

字符串常量池是存放在堆中,运行时常量池是存放在元空间中

还有访问方法区的外部接口Class对象是位于堆的

你可能感兴趣的:(思考)