- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
变量在Java栈、堆内存中应用管理探析
变量在Java栈、堆内存中应用管理探析 摘要 初次接触面向对象程序设计,不易弄清楚各种类型变量在内存中是如何分配和管理的。以Java为例,主要介绍基本数据类型一维数组内存模型、引用数据类型数组内存模型、方法调用时变量的内存模型、内部类的内存模型的活动空间。了解对象的属性和行为在内存中的位置和彼此间的关系,有助于更好地理解程序的编译原理和运行机制
关键词 JVM;内存模型;基本类型;引用类型
DOI DOI: 10.11907/rjdk.162172
中图分类号: TP301
文献标识码: A 文章编号 文章编号:2017)002002903
0 引言
对于不同的平台,内存模型通常有所差异。Java虚拟机、Java Virtual Machine(简称JVM)的内存模型规范是统一的。Java内存分配时涉及到的区域有:①栈内存(简称栈):一般用来存放基本类型的数据和对象的引用,不包括对象自身;②堆内存(简称堆):用来存放由new关键字创建的对象;③常量池:用来存放常量;④静态域:用来存放静态成员;⑤非RAM存储:一般指硬盘等永久存储空间;⑥寄存器:由编译器根据实际需要分配内存区域,用户在编程中无法控制它
Java中的变量包括基本类型和引用类型变量两大类,当用户在一个类中定义了一个变量,JVM在栈内存中为此变量分配空间大小,对象调用完变量后,Java虚拟机将释放掉先前为该变量分配的空间[1]。方法中的基本类型变量和对象引用变量,都在方法的栈中被分配空间。栈中主要存放一些基本类型的变量数据和对象引用。也即当用户在Java中声明一个变量时,则在栈中为其分配了一块空间,用来存放变量的值,变量的值可以是数值、false、null等。直接被?x值为数值或false的变量,即是通常Java中规定的8种基本数据类型变量,包括:boolean、byte、char、int、short、long、float、double,它们的值则放在栈中提供给用户使用;值为null的变量是引用类型的变量,在Java中凡是声明为数组、类(对象)、字符串、接口等类型的变量都是引用类型变量,在声明时其默认值也存放在栈中
由于引用类型变量在声明时默认值为null,所以要和存放在堆中的对象产生一定联系,以获取该对象的首地址信息来替换声明时的null,这种联系被形象地称为指向。建立了堆栈之间的指向,栈中的变量才有了真正的实体,才能被使用。Java中堆栈之间的指向类似于C语音中的指针。Java中的堆是一个运行时的数据区,用来存放由new关键字创建的对象和数组,它不需要程序代码来显式地释放内存空间,而是由堆动态地分配内存大小,由JVM虚拟机的自动垃圾回收器来管理那些不再被引用的内存。本文主要介绍引用数据类型变量在内存中的分配状况
1 基本数据类型一维数组内存模型
声明一个一维整形数组变量n,比如int []n,则n的值默认为null,存放在栈中,和其它内存没有任何交集,内存模型如图1所示。要想使用n数组变量,则应该创建对象给数组分配大小,给n变量赋予实际意义的值,所赋的值是该数组首元素的地址。在Java中声明一维整型数组后,由new关键字创建对象并为其分配空间,声明变量和创建对象通常由一步完成。如int []n=new int[3];n的值为数组首元素地址,即n指向数组的首元素,具体做法是将数组首元素的地址放入n变量中,替换n的初始值null。n中有3个能操作的变量,可以给3个变量作赋值操作,如同给任意一个简单变量赋值操作一样。如果用户没有给3个数组元素初始化,因为3个元素的类型都是整型(数值型),在堆内存中会默认3个元素的值都为0
内存模型如图2所示。如n不再指向数组的首元素,即当赋值号两边的操作对象之间没有任何联系时,n的值再次为null,内存模型如图3所示。没有被任何引用类型变量指向的对象是一个匿名对象
2 引用数据类型数组内存模型
2.1 对象数组类型
声明一个引用类型的数组变量stu,数组的类型为对象引用型,如Student []stu;与基本整型的一维数组相比,虽然都是引用类型,但数组的类型是对象型,不过值都是一样为null,对象数组值为null的内存模型和基本类型数组的模型一样,如图1所示。用new分配3个长度的空间,Student []stu = new Student[3],因为3个数组元素都为对象型的变量,初始默认值为null,还不能使用,内存模型如图4所示。要想使用数组中的每个数组元素,需要分别给各个数组元素补充完整信息,如图5所示。给数组的首元素赋值,有两个属性分为姓名“lisi”和年龄“18”,即可使用首元素
2.2 字符串类型
图6为字符串对象模型,
您可能关注的文档
最近下载
- 附着式升降脚手架施工方案范本.pdf VIP
- 小学四年级英语阅读理解30篇及小学四年级英语作文.doc VIP
- 电梯安装工程管理重难点分析.doc VIP
- 2025年保安员资格证考试题库大全(答案附后面).docx
- 【高考必备】高考总复习系列丛书-高三化学一轮复习考点优化设计(第五辑):考点六十三等效平衡Word版含解析[原创精品].doc VIP
- 米家小米智能门锁 E30使用说明书.pdf
- 统编版道德与法治八年级上册《诚实守信》说课课件.pptx VIP
- 第一单元峥嵘岁月 第1课情感表达 教学设计 人教版初中美术七年级上册.docx VIP
- 大班幼儿参与幼儿园物质环境创设的现状及提升策略.docx VIP
- 省优秀科组申报材料.pdf VIP
文档评论(0)