收藏 分销(赏)

Java中堆内存和栈内存详解.doc

上传人:二*** 文档编号:4512479 上传时间:2024-09-26 格式:DOC 页数:5 大小:44KB
下载 相关 举报
Java中堆内存和栈内存详解.doc_第1页
第1页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、 . . . . Java中堆存和栈存详解Java把存分成两种,一种叫栈存,一种叫堆存。当某一个函数被调用时,这个函数会在栈存里面申请一片空间,以后在这个函数部定义的变量,都会分配到这个函数所申请到的栈空间。当函数运行完毕时,分配给函数的栈空间被收回。在这个函数中被定义的变量也随之被释放和消失。通过new产生的数组和对象分配在堆存中。堆存中分配的存,由JVM提供的GC垃圾回收机制来管理。在堆存中产生了一个数组对象后,我们还可以在栈中定义一个变量,这个战中变量的取值等于堆中对象的首地址。栈存中的变量就成了堆存中数组或者对象的引用变量。我们以后就可以在程序中直接使用栈中的这个变量来访问我们在堆中分

2、配的数组或者对象,引用变量相当于数组或者对象起的一个别名,或者代号。引用变量是一个普通的变量,定义时在栈中分配;引用变量在被运行到它的作用域之外时就被释放,而我们的数组和对象本身是在堆中分配的,即使程序运行到使用new产生对象的语句所在的函数或者代码之后,我们刚刚被产生的数组和对象也不会被释放。数组和对象只是在没有引用变量指向它,也就是没有任何引用变量的值等于它的首地址,它才会变成垃圾不会被使用,但是它任然占据着存空间不放这也就是我们Java比拟吃存的一个原因,在随后一个不确定的时间被垃圾回收器收走。实际上,栈中的变量指向堆存中的变量,这就是Java中的指针!publicclassArrayT

3、est publicstaticvoid main(String args)int x = newint 100;int sum=0;for(inti=0;i100;i+)sum+=xi;我们可以int x = newint 100;分成两局部来写:int x ;和x=newint 100;。第一局部相当于定义了一个普通的变量,只是这个变量中存放的数据是堆中某个对象的首地址。接着我们使用,这一句是在堆存中产生了一个有100个元素整数类型的数组。当一个对象被创建时,会对其中各种类型的成员变量自动进展初始化赋值。除了根本数据类型之外的变量都是应用类型。Person p1 = new Person

4、(); 执行完后的存状态创建新的对象之后,我们就可以使用“对象名.对象成员的格式,来访问对象的成员包括属性和方法。publicclass Person intage;void shout()System.out.println(age);publicstaticvoid main(String args) Person p1=new Person();Person p2=new Person();p1.age=30;p1.shout();p2.shout();上面程序运行的存布局如下列图:Java中存分配策略与堆和栈的比拟1、存分配策略按照编译原理的观点,程序运行时的存分配有三种原那么,分别是静态的,栈式的,和堆式的。静态存储分配时指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的存空间。这种分配策略要求程序代码中不允许有可变数据结构比如可变数组的存在,也不允许有嵌套或者递归的结构出现,因为他们都会导致编译程序无法计算准确的存储空间需求。5 / 5

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服