基本数据类型的成员变量放在jvm的哪块内存区域里?(基本数据类型的变量,其内容为引用,即地址)

  本篇文章为你整理了基本数据类型的成员变量放在jvm的哪块内存区域里?(基本数据类型的变量,其内容为引用,即地址)的详细内容,包含有基本数据类型在jvm上的存储 基本数据类型的变量,其内容为引用,即地址 基本数据类型放在堆里 java基本类型变量存在哪里 基本数据类型的成员变量放在jvm的哪块内存区域里?,希望能帮助你了解 基本数据类型的成员变量放在jvm的哪块内存区域里?。

  问题:

  比如
class{
private int i;
}
如上代码,之前一直以为基本数据类型都是放在虚拟机栈中的,最近看了《深入理解jvm》,里面说到方法内定义的基本数据类型放在帧栈里,而且栈里面的数据是线程独有的,不共享。 那么基本数据类型的全局变量,到底是放在栈里面 还是堆里面,或者方法区里?

  

  解答:

  java虚拟机栈是线程私有的,生命周期跟线程相同,每个方法调用的时候都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每个方法调用的过程,就代表了一个栈帧在虚拟机栈中入栈到出栈的过程,当进入一个方法时,这个方法在栈中需要分配多大的内存都是完全确定的,方法运行时不会改变局部变量表的大小——《深入理解java虚拟机第二版》
很多java程序员一开始就被网上的一些教程所误导:基本数据类型放在栈中,数组和类的实例放在堆中。 这个说法不准确,事实上,如上面的全局变量i,他是存放在java堆中。因为它不是静态的变量,不会独立于类的实例而存在,而该类实例化之后,放在堆中,当然也包含了它的属性i。
如果在方法中定义了int i = 0;则在局部变量表创建了两个对象:引用i和0。 这两个对象都是线程私有(安全)的。 比如定义了int[] is = new int[10]. 定义了两个对象,一个是is引用,放在局部变量表中,一个是长度为10的数组,放在堆中,这个数组,只能通过is来访问,方法结束后出栈,is被销毁,根据java的根搜索算法,判断数组不可达,就将它销毁了。

  以上就是基本数据类型的成员变量放在jvm的哪块内存区域里?(基本数据类型的变量,其内容为引用,即地址)的详细内容,想要了解更多 基本数据类型的成员变量放在jvm的哪块内存区域里?的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: