基本数据类型的成员变量存在JVM的哪块内存区域里?

class{
	private int i;
}

如上代码,基本数据类型并不都是存放在虚拟机栈中,在《深入理解JVM》中

  1. 方法内定义的基本数据类型放在栈桢中,栈里面的数据是线程私有的,不共享。
  2. 方法外定义的全局变量,存放在java的堆中
    java虚拟机是线程私有的,生命周期跟线程是相同的,每个方法调用的时候都会创建一个栈桢用于存储局部变量表,操作数栈,动态链接,方法出口信息等。
    每个方法的调用的过程,代表着一个栈桢在虚拟机栈中入栈到出栈的过程。当进入到一个方法的时候栈中需要分配多大的内存都是完全确定的。方法运行时不会改变局部变量表的大小。
    事实上,如上面的变量i,它不是静态变量,不独立于类的实例存在,而该类实例化后放在堆中,当然也包含它的属性i。
class{
	public void test(){
		int j = 0 ;//1
		int[] s = new int[10]; //2
	}
}

1.上述第一行代码在局部变量表中创建了两个对象:引用 j 和 0。这两个对象都是线程私有的。
2.上述第二行代码定义了两个对象,一个是s引用,放在局部变量中,一个是长度为10 的数组方法堆中,这个数组只能通过s来访问。方法结束后出栈,s被销毁,随后根据java的根搜索法,判断数组不可达,就将他销毁。

    原文作者:myhAini
    原文地址: https://blog.csdn.net/myhAini/article/details/86674124
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞