几个月前自己提问的一个问题没人回答,现在突然翻到,自己回答下:

问题:

比如
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的哪块内存区域里?相关推荐

  1. java成员变量和局部变量的初始化和内存中的运行机制

    成员变量: 当系统加载类或创建类的实例时,系统会自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值. eyeNum是类属性.name是实例属性 所有person实例访问eyeNu ...

  2. Java虚拟机:JVM 主要组成部分与内存区域

    一.JVM 主要组成部分: JVM包含两个子系统和两个组件,分别为: Class loader(类装载子系统):根据给定的全限定名类名来装载class文件到运行时数据区的方法区中 Execution ...

  3. JVM中的五大内存区域划分详解

    一.快速扫盲 1. JVM是什么 JVM是Java Virtual Machine的缩写,即咱们经常提到的Java虚拟机.虚拟机是一种抽象化的计算机,有着自己完善的硬件架构,如处理器.堆栈等,具体有什 ...

  4. 【搞定Jvm面试】 Java 内存区域揭秘附常见面试题解析

    本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb ([Java学习 面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错 ...

  5. JVM实战与原理---内存区域分配

    JVM实战与原理 目录 内存区域分配 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区 6. 运行时常量池 内存区域分配 章节目的:明白虚拟机中的内存是如何划分?每块 ...

  6. C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法

    <p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana ...

  7. C++ static、const和static const类型成员变量声明及其初始化

    C++ static.const和static const类型成员变量声明及其初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. ...

  8. C++ 类中特殊成员变量(常量、静态、引用)的初始化方法

    有些成员变量的数据类型比较特别,它们的初始化方式和普通数据类型的成员变量有所不同.这些特殊类型的数据类型包括: 引用(&) 常量(const) 静态(static) 静态常量(static c ...

  9. java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题

    2019独角兽企业重金招聘Python工程师标准>>> /* * 几大原则 * 一.静态成员变量(Static) * 1.静态成员变量为类变量,所有对象共享同一内存空间 * 2.静态 ...

最新文章

  1. beego 获取字符串中的数据_MySQL中获取季度、年度等数据
  2. linux中oracle静默安装失败,oracle 11 Linux 静默安装 步骤及错误解决(更新中)
  3. 关于fullcalendar里显示json格式的events(java)
  4. @vue/cli启动异常:ENOENT: no such file or directory, scandir
  5. 教你如何看手相掌握命运!
  6. 【拼爹坑爹不比爹】深入理解css中position属性及z-index属性
  7. 二进制十六进制转换表
  8. 查看linux系统有哪些登陆用户,Linux_linux查看系统登录用户,Last login: Wed Jul 29 17:16:10 2009 fro - phpStudy...
  9. 学会这个小技巧,SSH 会话连接永远不超时!
  10. C++ Qt 05:Qt布局管理器 - 荒 木 - 博客园
  11. 中西医结合外科疾病 100247
  12. Oracle Data Guard 简介
  13. 【AI视野·今日CV 计算机视觉论文速览 第172期】Tue, 10 Dec 2019
  14. 表计算函数(Tableau)
  15. Web server failed to start. Port 8090 was already in use.
  16. 物联网应用层安全威胁_物联网安全威胁及对策
  17. c3po连接mysql带端口号_利用C3PO配置数据库连接池出现的问题
  18. centos7镜像下载安装
  19. 关于移动端页面开发(微信内置浏览器)总结
  20. Python爬虫学习之路(1)--前端

热门文章

  1. pcl里面的RoPs特征(Rotational Projection Statistics)
  2. mysql的四层架构_分布式数据库服务器的四层架构
  3. python输出箭头代码_python matplotlib 注释文本箭头简单代码示例
  4. html表格字体格式转换,【转】常用HTML代码速查表
  5. opencv32-基于距离变换和分水岭的图像分割
  6. 服务器Ubuntu Import Error:cannot import name main
  7. 测试人多少岁的软件,抖音你的三观多少岁免费测试app
  8. mongodb查询分页优化
  9. python学习笔记-day6-函数的延续【汉字转拼音模块,函数返回多个值,匿名函数,列表生成式,generator生成器,三元运算符】...
  10. ECharts.js学习(二)动态数据绑定