基本数据类型的成员变量存在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的根搜索法,判断数组不可达,就将他销毁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值